c++ - C ++如何使用关键字“朋友”与来自两个类的成员函数相互包含
问题描述
我是新学习 C++ 我如何将朋友与来自两个类的成员函数一起使用?我无法通过 Google 找到好的答案
下面是我的代码:
#ifndef FriendTest_hpp
#define FriendTest_hpp
class FriendVisitor;
class FriendTest{
friend int FriendVisitor::getTestAdd();
private:
int add=23;
int getAdd(){
return add;
}
public:
void test(){
printf("hello");
}
FriendTest()=default;
};
#ifndef FriendVisitor_hpp
#define FriendVisitor_hpp
#include <stdio.h>
class FriendTest;
class FriendVisitor{
FriendTest* test;
public:
FriendVisitor(){
}
int getTestAdd();
};
#endif /* FriendVisitor_hpp */
IDE给我错误的错误是:
不完整的类型“在嵌套名称说明符中命名的 FriendVisitor”
解决办法是什么?
解决方案
你的问题在这里:
class FriendVisitor;
class FriendTest{
friend int FriendVisitor::getTestAdd();
在编译的这一点上,FriendTest
类知道类的存在,FriendVisitor
但不知道它的任何成员,因为它的声明不完整。如果您将代码重新排序以FriendVisitor
首先完全声明,那么一旦您在其中声明友元函数FriendTest
并编译,它的声明就完成了:
#include <stdio.h>
class FriendTest; // Forward declaration
class FriendVisitor{
FriendTest* test; // Only references the class, so only forward declaration needed
public:
FriendVisitor(){
}
int getTestAdd();
};
class FriendTest{
friend int FriendVisitor::getTestAdd(); // FriendVisitor is fully declared, friend function is legal
private:
int add=23;
int getAdd(){
return add;
}
public:
void test(){
printf("hello");
}
FriendTest()=default;
};
推荐阅读
- java - Java 中的 System.out.write() - 不打印整数值的最低有效位
- paypal - PayPal Checkout.js 函数数据与操作变量?
- java - 将代理数据设置为 Spring SOAP Web 服务模板
- activemq - ActiveMQ 可能还没有准备好。服务正在部分运行
- java - 新值 EditText 未显示,没有任何错误
- python - discord.py 使用 json 的调平系统。如何将这些东西添加到我的代码中?
- java - HttpMethodBase 与 HttpRequestBase
- c# - Deserializing xml returns zero elements
- css - Wordpress Woocommerce 主题的标题不像原始演示那样透明
- mongodb - 通过查询将数组对象中的键值获取到mongodb和mongoose中的数组