我是新学习的c ++如何在两个相互包含的类中将friend与成员函数一起使用?我无法通过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”
解决方案是什么?
答案 0 :(得分:3)
您的问题在这里:
class FriendVisitor;
class FriendTest{
friend int FriendVisitor::getTestAdd();
在编译的这一点上,FriendTest
类知道FriendVisitor
类的存在性,但不知道其任何成员,因为其声明不完整。如果先对代码重新排序以完全声明FriendVisitor
,则在FriendTest
中声明friend函数后,其声明就完成了,并且会编译:
#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;
};