使用重载operator =不编译

时间:2014-08-20 10:57:09

标签: c++ overloading operator-keyword

您好我在我的课程中为=实现了一个重载运算符,但它没有编译:

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

这失败了。它与我使用指针有关吗?

4 个答案:

答案 0 :(得分:4)

  

我是否正在使用指针?

完全。您尝试将指针分配到您指向的对象中。你希望这个有用吗?

int *p = new int;
p = 42;

我猜不是,你实际上是

*p = 42;

在你的情况下也这样做:

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

当然,请记住这是C ++,如果您不需要,请不要使用动态分配。这会更好:

OpClass<int> intOpClass;
intOpClass = 6;

答案 1 :(得分:3)

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
}

答案 2 :(得分:1)

你应该使用

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

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

答案 3 :(得分:0)

这两个课程都缺少;。 你是对的。要调用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; 
    }
};