2

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

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() - 非法调用非静态成员函数

如何为“pimpled”类实现 ostream 运算符<<?

4

1 回答 1

9

你的定义应该是:

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

运算符不是class成员,尽管在class.

于 2012-04-30T13:29:24.457 回答