我有以下代碼:定義常量在實現文件
了foo.h:
include "Bar.h"
class Bar;
class Foo {
const Bar mBar;
public:
Foo(const Bar &bar);
};
Foo.cpp中:
#include "Foo.h"
Foo::Foo(const Bar &bar) : mBar(bar) {}
我收到以下編譯錯誤:
'Foo::mBar' uses undefined class 'Bar'
是const定義n不允許在實施文件中?
顯然在這種情況下,我可以將ctor實現移動到頭文件中。
但是,如果我想調用Bar ctor,可能需要前向聲明而不是複製ctor,並仍然保持Bar成員變量不變,那麼什麼是替代方法? 因此,例如:
了foo.h:
include "Bar.h"
class Bar;
class BaraParams;
class Foo {
const Bar mBar;
public:
Foo(const BarParams &barParams);
};
Foo.cpp中:
#include "Foo.h"
Foo::Foo(const BarParams &barParams) : mBar(barParams) {} //call bar ctor
Bar.h:
include "BarParams.h"
class Bar{
public:
Bar(const BarParams &barParams);
};
還是我不這樣做對嗎?我甚至不知道這是否是一個好主意。
編譯錯誤與'const'限定符無關。由於'mBar'既不是引用,也不是指向Bar的指針,編譯器需要知道Bar的大小,當編譯器遇到mBar成員變量時需要定義Bar。 – foobar
嗯所以我只能使用參考或指針? –
不,你也可以在'Foo'前面定義'Bar'來使用簡單的'Bar'。類成員的定義通常在頭文件中完成,所以如果你正確地組織你的源代碼,那麼'Bar'類的相應頭文件的'#include'預處理器指令就足夠了。 – foobar