警告赋值运算符类引用

时间:2014-05-21 06:33:36

标签: c++ class reference warnings

我有这段代码:

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警告语句来禁止警告)。

谢谢!

2 个答案:

答案 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然后不提供实现。