我是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()
函数出了点问题。谢谢
最佳答案
strcpy
没什么错,但是您的用法没有错。可以使用std::string
复制operator=
:
std::string a;
std::string b;
a = b; // copy b to a
另一方面,strcpy
用于c字符串,而std::string
则不是:char* strcpy( char* dest, const char* src );
目前尚不清楚为什么要有一个指向std::string
的类型指针的成员。您应该使用std::string
(无指针),或者如果这是编写自己的字符串类的练习(不是简单的!),那么您应该将数据存储在char
数组中。您得到的错误与
strthing.str
有关。这里strthing
是没有std::string
成员的str
。如果该构造函数应该是副本构造函数,则应使用const mystring&
作为参数,而不是const std::string&
。
关于c++ - strcpy无法在类中使用字符串指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62715850/