5

我应该如何解决以下类型的循环依赖?

//A.hpp
#include "B.hpp"

struct A {
    B b;
    int foo();
};

//A.cpp
#include "A.hpp"

int A::foo{
    b.fi(*this);
}


//B.hpp
struct A;

struct B {
    int fi(const A &a);
};

//B.cpp
#include "B.hpp"

int B::fi(const A &a){
    if(a.something()) 
        something_else();
}
4

3 回答 3

5

A按照您的要求转发声明B.hpp,然后包含A.hppB.cpp. 这就是前向声明的用途。

于 2013-06-16T02:21:30.987 回答
1

A您可以为and定义基类,并在单独的标头中将andB定义为这些基的虚函数。然后包括来自和的这些标题。fisomethingAB

于 2013-06-16T02:17:25.030 回答
1
//B.hpp

struct A;

#ifndef B_H    // <-- header guard
#define B_H

struct B {
    int fi(const A &a);
};

#endif

//B.cpp
#include "A.hpp"   // <-- so that fi() can call A::something()
#include "B.hpp"

int B::fi(const A &a){
    if(a.something()) 
        something_else();
}
于 2013-06-16T02:24:09.530 回答