如何重载ostream运算符<<对于一个pimpl课程?

时间:2012-04-30 13:28:21

标签: c++

这是我到目前为止所尝试的:

class Fahrzeug
{
public:

    std::string Id() const;
    void Id(const std::string &id);

    friend std::ostream& operator<< (std::ostream &out, const Fahrzeug &fzg)
    {
        out << Id();
        return out;
    }

private:
    struct DatenImpl;
    boost::scoped_ptr<DatenImpl> _datenImpl;
};

这会产生编译器错误:

  

错误C2352:Id() - 非静态成员函数的非法调用

如何实现ostream运算符&lt;&lt;对于“疙瘩”课程?

1 个答案:

答案 0 :(得分:9)

您的定义应该是:

friend std::ostream& operator<< (std::ostream &out, const Fahrzeug &fzg)
{
    out << fzg.Id();  // <--- qualify call to Id()
    return out;
}

虽然在class内定义了运营商,但该运营商不是class会员。