使用重载的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;
}
};
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么使用 std::vector 的代码不能编译,但使用 std::unique_ptr 如果没有 noexcept
- 为什么我不能编译这个在Cygwin的Visual Studio中编写的C++文件?
- 为什么我不能编译这个简单的线程测试?
- 为什么 --string::end() 可以编译,而 --string.size() 不能编译?
- 为什么G 5.4不能编译此编译时质数代码
- 为什么最简单的模板模板不能编译
- 为什么这个 c++ 代码不能编译?
- 为什么我不能编译这个开源项目
- 为什么 g++ 不能编译一个简单的 GTK 程序?
- C++。为什么我不能编译此代码?使用const_cast去除恒常性有什么问题?
- 为什么这个模板函数不能编译C++
- 托管类型的成员函数不能编译为非托管函数
- 为什么这个简单的C++程序不能编译?
- 为什么这个C++代码不能编译
- 为什么没有enable_if就不能编译
- 使用重载的operator=不能编译
- CodeRunner——不能编译多个源c++程序
- 为什么[]可变{}不能编译
- 为什么自建的g++编译器不能编译我的代码