我有这段代码:
class ABC{
public:
ABC(std::ostream& os) : _os(os) {}
void operator() (const Stud* course) {
Stud->print(_os);
}
ABC& operator=(const ABC& other); //Declaration of operator=
private:
std::ostream& _os;
};
因为我定义了赋值运算符我得到警告"无法生成赋值运算符"。 我希望在对象之间进行赋值,这个类什么也不做,它只是在for_each算法中打印。
我试着写:
ABC& operator=(const ABC& other){
return *this;
}
但仍然警告对方不要使用。 如何定义赋值运算符什么都不做。 (否使用#pragma警告语句来禁止警告)。
谢谢!
答案 0 :(得分:0)
您的代码中几乎没有问题......
class ABC
{
public:
ABC(std::ostream& os) : _os(os) {}
void operator() (const Stud* course)
{
//Stud->print(_os); // you can't use Stud here - this is wrong
course->print(_os);
}
ABC& operator=(const ABC& other); //Declaration of operator=
private:
std::ostream& _os;
};
此外,由于operator()
将course
定义为const Stud*
,print
类中的Stud
方法也应定义为const
。< / p>
除此之外,代码会完全编译。
答案 1 :(得分:0)
要删除有关未使用参数的警告,请不要将其命名为:
ABC& operator=(const ABC&){
return *this;
}
编译器无法为您的类生成赋值运算符的原因是它有一个引用变量,这些只能初始化,永远不会重新赋值。
如果你不需要一个赋值运算符,但只添加一个以使编译器满意,你可以声明它private
然后不提供实现。