首页 > 解决方案 > 朋友功能错误:“B”尚未声明

问题描述

我测试了下面的代码(只是为了测试,我知道这是个坏主意),我不明白为什么它会出错。请帮我!

有两个类AB,都在单独的hpp文件中。我让它们相互包含(我认为这无关紧要,因为),直到我添加了ininclude guard的定义才出错。B::funB.cpp

#ifndef A_H
#define A_H

#include "B.h"

class A {
    friend void B::fun(A&);
};

#endif

溴化氢

#ifndef B_H
#define B_H

#include "A.h"

class A;

class B {
    public:
        void fun(A&);
};
#endif

B.cpp

#include "B.h"

void B::fun(A& a) {
    
}

主文件

#include "A.h"
#include "B.h"

int main() {

}

我用这样的命令运行它:

g++ -g -o test main.cpp B.cpp

错误信息

A.h:7:17: error: 'B' has not been declared
    friend void B::fun(A&);

我知道症状的两种解决方法,但我想了解问题的根本原因。

方法一:将代码注释#include "A.h"B.h

方法二:修改#include "B.h"#include "A.h"inB.cpp

我想知道为什么这些解决方法可以避免症状,这两种方法的确切原因。

标签: c++

解决方案


只需#include "A.hpp"B.hpp. 发生这种情况是因为当B.cppincludes时B.hpp,后者又包含A.hppbeforeB被定义。但是你根本不需要包含A.hpp,因为你已经正确地声明了class A


推荐阅读