首页 > 解决方案 > 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”

解决办法是什么?

标签: c++classeachfriendcontain

解决方案


你的问题在这里:

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;
};

推荐阅读