1

ostream & operator<<(ostream &os, A &A0)函数正在生成警告。

这是该类的定义方式:

class A
{
    public:
        friend ostream & operator<<(ostream &os, A &A0);
        A& operator=(string strSlot_);
        A& operator+(string strSlot_);
        A& operator+(const A &B);
        A& operator=(const A &B);
        string slotReturn();
        A(string strSlot_);
        A(const A &object);
        void slotChange();
        void sCout();
        ~A();
        A();
    private:
        string strSlot;
        int n;
};


ostream & operator<<(ostream &os, A &A0)
{
    os << "strSlot = \"" << A0.slotReturn() << "\"" << endl;
}

string A::slotReturn()
{
    return strSlot;
}

问题是,它应该返回什么?*this似乎不起作用(因为它是一个friend?)。(这只是一个警告,但我还是想知道。)

另外,为什么我不能A &A0作为 const 传递(在这种情况下,错误是:“将 'const A' 作为 'std::string A::slotReturn()' 的 'this' 参数传递会丢弃限定符”)?

4

1 回答 1

5

您需要返回std::ostream&自身:

ostream & operator<<(ostream &os, A &A0)
{
   return  os << "strSlot = \"" << A0.slotReturn() << "\"" << endl;
}

顺便说一句,术语略有偏差。没有“朋友班”。是这里std::ostream& operator<<的朋友。但它甚至不需要成为朋友,因为它只是调用A. 所以你可以删除朋友声明。

您可能还应该制作slotReturn()一个const方法:

string slotReturn() const;
        //            ^ const method

并修改ostream& operator<<以获取 const 引用:

ostream & operator<<(ostream& os, const A& A0) { .... }

这将允许您打印出临时文件:

std::cout << A("I am a temporary!") << "\n"; 
于 2012-11-22T16:20:59.187 回答