我有一个前向声明,但希望将前向声明的类的实例作为默认值。
所以我的代码看起来或多或少是这样的:
bar.h
class Foo;
class Bar
{
public:
Bar();
void test(Foo foo = Foo(7));
}
和foo.h
class Foo
{
public:
Foo(int val);
}
这甚至可能吗?
答案 0 :(得分:2)
没有。当你声明一个方法/函数哪个参数是Foo
时,编译器应该已经知道Foo
的大小,所以它应该已经在那时被定义了。如果您声明但未定义Foo
,则可以仅使用指针或引用它。
答案 1 :(得分:1)
如另一个答案所述,这是不可能的。
除此之外,默认值是代码气味。它们使您的界面变得脆弱
使用方法重载:
class Foo;
class Bar
{
public:
Bar();
void test(); // implement with default value, and document it
void test(Foo foo); // implement with user-supplied value
}
在bar.cpp
:
#include "foo.h" // Complete Foo is available here
void Bar::test()
{
test(Foo(42));
}
void Bar::test(Foo foo)
{
...
}