C++学习记录-面向对象-成员函数做友元问题
C++学习记录-面向对象-成员函数做友元问题
以下成员函数做友元代码:
1 | class chara { |
编译器会报错。原因是先在chara类中声明search成员函数友元时,编译器并不知道search是什么,search类里面有什么,因此会出错。修改如下:
1 | class chara;//声明chara类 |
此时还是报错了
1>D:\Work\C艹练习\练手\Project1\Project1\源.cpp(35,1): error C2027: 使用了未定义类型“chara”
1>D:\Work\C艹练习\练手\Project1\Project1\源.cpp(29): message : 参见“chara”的声明
1>D:\Work\C艹练习\练手\Project1\Project1\源.cpp(36,1): error C2027: 使用了未定义类型“chara”
1>D:\Work\C艹练习\练手\Project1\Project1\源.cpp(29): message : 参见“chara”的声明
原因:
上面的程序使用了前向声明(可以声明一个类而不定义它,这个声明被称为前向声明(forward declaration)。)
在声明之后,定义之前,类是一个不完全类型(incompete type),即已知向前声明过的类是一个类型,但不知道包含哪些成员。
不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。
因此代码应修改如下:
1 | class search; |
可以通过单独编译和向前声明方法实现两个类之间相互引用成员,以后再来
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





