您好我在我的课程中为=实现了一个重载运算符,但它没有编译:
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'
}
}
这失败了。它与我使用指针有关吗?
答案 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;
}
};