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あなたが持っているように inを前方宣言しB.hpp、次にA.hppinを含めますB.cpp。それが前方宣言の目的です。

于 2013-06-16T02:21:30.987 に答える
1

との基底クラスを定義し、 とAをこれらの基底の仮想関数として個別のヘッダーで定義できます。次に、との両方からこれらのヘッダーを含めます。BfisomethingAB

于 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 に答える