如何获得类成员函数以访问另一个类成员函数的私有成员?

时间:2015-04-02 22:50:08

标签: c++

我的问题是我正在尝试获取类成员函数来访问另一个类的私有成员变量。我已经将类成员函数声明为类的朋友,但编译器继续告诉我变量是不可访问的。这是代码:

    #include <iostream>

    using namespace std;
    class Numbers2;

    class Numbers
    {
    private:
        int num;
    public:
        Numbers(){num = 0;};
        friend void Numbers2::getNumbers(Numbers &);

    };

    class Numbers2
    {
    private:

    public:
        void getNumbers(Numbers &);
    };

    void Numbers2::getNumbers(Numbers &numbs)
        {
            cout << numbs.num << endl; //Right here is where the compiler 
                                       //leads me and tells me the variable
        };                             // is inaccessible

    int main()
    {
        Numbers num1;
        Numbers2 num2;

        num2.getNumbers(num1);


        system ("Pause");
        return 0;
    }

我将非常感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您没有阅读所有错误消息。您只阅读了int成员无法访问的内容,但the messages above it tell you why

main.cpp:12:51: error: invalid use of incomplete type 'class Numbers2'
         friend void Numbers2::getNumbers(Numbers &);
                                                   ^
main.cpp:4:11: error: forward declaration of 'class Numbers2'
     class Numbers2;
           ^
main.cpp: In member function 'void Numbers2::getNumbers(Numbers&)':
main.cpp:9:13: error: 'int Numbers::num' is private
         int num;
             ^
main.cpp:25:27: error: within this context
             cout << numbs.num << endl;
                           ^

这些最终错误只会显示,因为第一个错误导致整个friend声明失败。因此,这是您需要修复的第一个错误。

请参阅,你不能在那里引用Numbers2::getNumbers,因为Numbers2只是在那时被向前声明:编译器对其中名为getNumbers的函数一无所知! / p>

相反,将Numbers2 的定义置于之上<{1}}的定义,并转发声明Numbers

live demo