我创建了一个类myString,并试图运行以下代码:
class myString{
char* str;
int len;
public:
myString(char* str1 = " "){
len = strlen(str1);
str = new char[len+1];
strcpy(str, str1);
};
int getLen() const {
return len;
};
char* getString() const {
return str;
};
~myString(){
delete[] str;
};
myString& operator=(myString& orig){
cout << "hello";
if (str == NULL){
delete[] str;
};
str = new char[orig.getLen()];
strcpy(str, orig.getString());
cout << this << endl;
return *this;
};
...
};
int main(){
myString s("bla");
myString k("dingo");
myString g = s;
// s=k; //When this line is commented I get a linking error
...
};
我的问题:
s=k
行导致链接器错误? 这是错误:
谢谢,
里
最佳答案
对于以下内容,您需要一个复制构造函数。它不使用赋值运算符功能。
myString g = s;
编辑
对于链接器错误-我无法帮助您。我不会猜测该行调用什么
operator<<
,而是放弃这一点,因为您尚未提供代码。在普通的C++代码中,简单的cout << this;
不会导致链接器错误。 cout
具有一个为此接受void const*
的运算符。您已在某个位置声明了一个运算符,该运算符可提供更好的匹配,但未定义它。关于c++ - 操作符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3639533/