使用重载的operator=不能编译

using overloaded operator= does not compile

本文关键字:不能 编译 operator 重载      更新时间:2023-10-16

嗨,我实现了重载操作符=在我的类,但它不编译:

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; 
    }
};