我创建了一个类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
         ...
   };

我的问题:
  • 为什么没有打印“hello”?
  • 为什么s=k行导致链接器错误?

  • 这是错误:



    谢谢,

    最佳答案

    对于以下内容,您需要一个复制构造函数。它不使用赋值运算符功能。

    myString g = s;
    

    编辑

    对于链接器错误-我无法帮助您。我不会猜测该行调用什么operator<<,而是放弃这一点,因为您尚未提供代码。在普通的C++代码中,简单的cout << this;不会导致链接器错误。 cout具有一个为此接受void const*的运算符。您已在某个位置声明了一个运算符,该运算符可提供更好的匹配,但未定义它。

    关于c++ - 操作符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3639533/

    10-11 18:24