我有以下代码:
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) {}
我收到以下编译错误:
'富::毫巴'使用未定义的类' Bar'
实现文件中不允许使用const定义吗?
显然,在这种情况下,我可以将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);
};
或者我不是这样做的吗?我甚至都不知道这是不是一个好主意。
答案 0 :(得分:0)
头文件必须包含Bar头文件。 完整的事情是这样的:
class Foo {
const Bar& mBar;
public:
Foo(const Bar &bar);
};
您可以而且应该在以下情况下使用前瞻声明
include "BarParams.h"
class Bar{
public:
Bar(const BarParams &barParams);
};
但是条形码必须出现在实施文件中 这里可以应用相同的推理而不是:
class BarParams;
class Bar{
public:
Bar(const BarParams &barParams);
};
这样做:
{{1}}
这样做可以避免不必要的内容包括你的头文件,并使编译器的生命更容易。在大型项目中,编译时间可以大大减少。