c ++错误:(私有数据成员)未在此范围内声明

时间:2011-10-27 19:59:52

标签: c++ friend-function

说我有一个这样的课程:

class Ingredient
{
    public:
        friend istream& operator>>(istream& in, Ingredient& target);
        friend ostream& operator<<(ostream& out, Ingredient& data);
    private:
        Measure myMeas;
        MyString myIng;
};

在这个重载的朋友函数中,我正在尝试设置myIng

的值
istream& operator>>(istream& in, Ingredient& target)
{
    myIng = MyString("hello");
}

在我看来,这应该有效,因为我在友元函数中设置了Ingredient类的私有数据成员的值,而friend函数应该可以访问所有私有数据成员吗?

但我收到此错误:‘myIng’ was not declared in this scope 对于为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:6)

因为您需要明确表示您正在访问target参数的成员,而不是本地或全局变量:

istream& operator>>(istream& in, Ingredient& target)
{
    target.myIng = MyString("hello"); // accessing a member of target!
    return in; // to allow chaining
}

以上内容完全正常,因为您提及的运营商是friend Ingredient。尝试删除友情,您将看到无法再访问private成员。

另外,正如Joe评论:流操作符应返回其stream参数,以便您可以链接它们。

答案 1 :(得分:2)

在该范围内,没有任何名为myIng的内容。错误很清楚。它的Ingredient& target成员myIng,所以你应该写:

target.myIng = MyString("hello");