读书人

不明白关于友员的一个有关问题望各位

发布时间: 2012-02-21 16:26:23 作者: rapoo

不明白关于友员的一个问题,急,望各位赐教
我用vc编译的,其中有个语句不明白.用***标出了,错误也在***中标出了.为什么把后面标号为9的句子换成friend class Teacher;就可以了

#include "stdafx.h "
#include "iostream "
#include "string "
using namespace std;

class Student;
class Teacher;
class Student{
int grades;
public:
Student(){grades=0;}
Student(int g){grades=g;}
void getinfo(){cout < < " 成绩 " < <grades < <endl;}
friend void Teacher::assigngrades(Student& ss);//9
********************************************************
错误上面语句//error C2027: 使用了未定义类型“Teacher”
********************************************************
};
class Teacher{
Student s;
int num;
public:
Teacher(){num=113206;}
void assigngrades(Student& ss);
void getinfo(){cout < <num < <endl;}
};
void Teacher::assigngrades(Student& ss){ss.grades=80;}
********************************************************
错误上面语句//error C2248: “Student::grades”: 无法访问 private 成员(在“Student”类中声明)
********************************************************
int main(int argc, _TCHAR* argv[])
{
Student s1;
Teacher t1;
t1.assigngrades(s1);
s1.getinfo();
return 0;
}


[解决办法]
********************************************************
错误上面语句//error C2027: 使用了未定义类型“Teacher”
********************************************************
这个错因为前面只有一个前置定义了Teacher,没有定义其成员函数,因而无法赋予还没有定义东西友员的权力
用friend class teacher;就可以了
只要有一个前置定义的teacher就可以赋予其友员的资格

读书人网 >C++

热点推荐