簡體   English   中英

使用重載 operator= 不編譯

[英]using overloaded operator= does not compile

嗨,我在我的班級中為 = 實現了一個重載運算符,但它沒有編譯:

template<class T>
class OpClass {

  public:

    void Set(T val) {
        _val = val;
    }

    OpClass& operator=(T val) {
        this->Set(val);
        return *this;
    }

  protected:

    T _val;
}

class testOpClass {
    testOpClass() {
        OpClass<int>* intOpClass = new OpClass<int>();
        intOpClass = 6; // Does not compile I get following Error:
        // error: assigning to 'OpClass <int> *' from incompatible type 'int'
    }
}

這失敗了。 這與我使用指針有關嗎?

這與我使用指針有關嗎?

確切地。 您正在嘗試分配給指針,而不是分配給您指向的對象。 你希望這能奏效嗎?

int *p = new int;
p = 42;

我想不會,你實際上會這樣做

*p = 42;

在你的情況下也做同樣的事情:

OpClass<int>* intOpClass = new intOpClass();
*intOpClass = 6;

當然,請記住這是 C++,如果您不需要,請不要使用動態分配。 這會更好:

OpClass<int> intOpClass;
intOpClass = 6;
testOpClass() {
    OpClass<int>* intOpClass = new OpClass<int>(); // Use OpClass class 
    *intOpClass = 6; // Use de-referencing 

    // ...
    delete  intOpClass ; //Make sure to release memory or better  
                         // avoid dynamic objects
}

你應該使用

class testOpClass {
    testOpClass() {
        OpClass<int>* intOpClass = new intOpClass();
        *intOpClass = 6;
    }
};

或者

class testOpClass {
    testOpClass() {
        OpClass<int> intOpClass;
        intOpClass = 6;
    }
};

兩個類都缺少一個; . 你是對的。 調用intOpClass = 6不允許是指針。 只需取消引用它或不使用指針。

template<class T>
class OpClass {

  public:

    void Set(T val) {
        _val = val;
    }

    OpClass& operator=(T val) {
        this->Set(val);
        return *this;
    }

  protected:

    T _val;
};

class testOpClass {
    testOpClass() {
        OpClass<int> intOpClass;
        intOpClass = 6; 
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM