C ++如何将关键字“朋友”与来自两个类的彼此包含的成员函数一起使用

时间:2018-07-24 15:19:33

标签: c++ class each friend contain

我是新学习的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”

解决方案是什么?

1 个答案:

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