我有一個循環頭問題,它與這裏已經提到的大多數問題不同。我有兩個相互依賴的類,但是不是成員所以不要碰到編譯器無法計算類的大小的問題。所以我可以使用前向聲明來打破這個循環。使用正向引用
但是,我不希望客戶端必須包含這兩個頭才能使用我的類。標題應該是自包含的,因此用戶不需要知道這種依賴關係。有沒有辦法做到這一點?
編輯:棘手的部分是,A和B必須定義僅標題。
在頭A.hpp
#ifndef A_HPP
#define A_HPP
#include "B.hpp"
struct A
{
B foo() { ... }
};
#endif
在頭B.hpp
#ifndef B_HPP
#define B_HPP
struct A;
struct B
{
void bar()
{
A a = A();
...
}
};
#endif
在main.cpp中
#include "B.hpp"
B().bar(); // error: 'a' uses undefined class 'A'
如果'A.hpp'包含'B.hpp',爲什麼不在'main.cpp'中包含'A.hpp'而不是'B.hpp'? – chris 2012-07-19 00:45:14
'A'實際上是'B'的內部實現細節。我真的不想讓客戶知道任何事情 – thehouse 2012-07-19 00:46:53
「B」應該只是一個頭部實現?否則,爲什麼頭文件中的「bar」代碼? – 2012-07-19 00:48:39