在实现文件中定义const

时间:2015-08-08 19:17:28

标签: c++

我有以下代码:

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);
};

或者我不是这样做的吗?我甚至都不知道这是不是一个好主意。

1 个答案:

答案 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}}

这样做可以避免不必要的内容包括你的头文件,并使编译器的生命更容易。在大型项目中,编译时间可以大大减少。