我有一个班级:
class BankAccount
{
string *name;
string *number;
public:
BankAccount(BankAccount &);
~BankAccount();
};
BankAccount::BankAccount(BankAccount &account)
{
string nameS = account.name;
this->name = new string(nameS);
this->number = new string(account.*number);
}
我想我的复制构造函数将字符串(不是指针,而是由指针指向的字符串)复制到新对象。我尝试了两种不同的方法,但我从未成功过。
编译器消息:
conversion from 'std::string* {aka std::basic_string<char>*}' to non-scalar type 'std::string {aka std::basic_string<char>}' requested
'((BankAccount*)this)->BankAccount::number' cannot be used as a member pointer, since it is of type 'std::string* {aka std::basic_string<char>*}'
答案 0 :(得分:2)
BankAccount类可能只包含字符串对象而不是指向字符串的指针
class BankAccount
{
string name;
string number;
};
编辑:正如其他用户所指出的那样,你现在不再需要编写复制构造函数或析构函数,因为std字符串可以自行处理
答案 1 :(得分:2)
根据其他注释和答案,在这种情况下,不需要使用指针作为实例变量。你最好只是让实例变量成为实际的字符串。但只是为了解释你的问题:
string nameS = account.name;
account.name是指向字符串的指针,因此您需要:
string nameS = *account.name;
在此声明中:
this->number = new string(account.*number);
您正在解除引用错误。它应该是:
this->number = new string(*account.number);