为什么这个朋友的功能不能访问私有变量?

use*_*112 4 c++ class friend

class Student{
public:
Student(int test)
:key(705)
{
    if(test == key)
    {cout << "A student is being verified with a correct key: "<< test << endl;
    allow=1;
    }
    else
    {
        cout << "Wrong key" ;
    }
}

friend void printResult();


private:
const int key;
int allow;


};

void printResult()
{
 if(allow==1)
 {
   cout<< " Maths: 75 \n Science:80 \n English: 75" << endl;
  }
}

int main()
{
int testkey;
cout << "Enter key for Bob: ";
cin >> testkey;

Student bob(testkey);

printResult();

}
Run Code Online (Sandbox Code Playgroud)

printResult函数似乎无法从Student类访问变量allow(私有).我是否在错误的地方将printResult原型化或语法错误?AFAIK,我们可以在课堂上的任何地方为朋友制作原型.

Moh*_*oun 5

那是因为allow属于类的实例,但没有引用实例.

您应该创建printResult该类的成员函数,而不是使其成为外部函数,或者使该函数引用Student实例,以便您可以allow通过instance.allowwhere instance是类型的参数来访问该成员const Student&.


jua*_*nza 5

printResult不是成员函数,所以你需要给它一个Student实例来进行操作.例如

void printResult(const Student& s)
{
 if(s.allow==1)
 {
   cout<< " Maths: 75 \n Science:80 \n English: 75" << endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后

Student student(1);
printResult(student);
Run Code Online (Sandbox Code Playgroud)