【发布时间】:2020-10-24 04:54:03
【问题描述】:
我是 C++ 新手。我制作了一个简单的程序,根据您的输入命名类的成员。
但由于某种原因,编译器显示此错误 - 'str': is not a member of 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>',我无法理解它的含义。
请帮帮我
这是我的代码 -
#include <iostream>
#include <string>
#include <vector>
class mystring
{
private:
std::string *str;
public:
//constructors
mystring();
mystring(const std::string &strthing);
~mystring();
//methods
void display() const;
};
mystring::mystring() //defalt constructor
:str(nullptr)
{}
mystring::mystring(const std::string& strthing) //copy constructor
:str(nullptr)
{
delete str;
str = new std::string;
strcpy(this->str, strthing.str);
std::cout << "overloaded\n";
}
mystring::~mystring() //destructor
{
delete [] str;
}
void mystring::display() const //display func
{
std::cout << *str;
}
int main()
{
mystring thing;
mystring object{ "samurai" };
object.display();
}
我认为重载构造函数中的strcpy() 函数有问题。
谢谢
【问题讨论】:
-
有很多错别字,试着改正
-
您似乎将
std::string类与 C 风格的char*字符串混淆了。 -
strcpy(this->str, strthing.str);应该是*this->str = strthing.str;。你也应该关注The Rule of Three。 -
你需要
str成为一个指向std::string而不仅仅是一个std::string的机会非常渺茫,同样对@ 的必要性提出了质疑首先是 987654332@。 -
另外
delete [] str;不好,因为str不是通过new[]分配的。
标签: c++ string class oop object