我正在使用一个名为custom(不是实际名称)的外部库,该库在其自己的名称空间中定义了许多数据类型。假设命名空间也被命名为custom
。
我正在尝试使用名为DataType
的数据类型。 DataType
是使用typedef定义的自定义类型,我们假设通过包含"custom/datatype.h"
可以在.cpp文件中使用它。
我的代码具有以下设置。
action.h:
class Action
{
Action() {}
virtual ~Action() {}
virtual void foo(custom::DataType*) const = 0;
...
}
some_action.h:
#include "action.h"
class SomeAction : public Action
{
SomeAction() {}
virtual void foo(custom::DataType*) const override;
...
}
some_action.cpp:
#include "some_action.h"
#include "custom/datatype.h"
...
void SomeAction::foo(custom::DataType*) const
{
...
}
除了在
DataType
中包含action.h
之外,是否有任何适当的方法来向前声明some_action.h
和"custom/datatype.h"
中的action.h
? 最佳答案
除了在DataType
中包含action.h
之外,是否还有其他适当的方法来定义some_action.h
和"custom/datatype.h"
中的action.h
?
您可能不想“定义” DataType
,而是改为"forward declare"。这使您可以使编译器知道稍后将定义的custom::DataType
。
您可以按照以下步骤实现。在action.h
和some_action.h
中添加以下正向声明:
namespace custom { class DataType; }
在需要定义
.cpp
的DataType
文件中,包括"custom/datatype.h"
。如果
custom::DataType
是类型别名(即typedef
),则需要包括标题。没有一种方法可以向前声明类型别名:请参阅this question & answers以获取相关信息。关于c++ - 在头文件中前向声明另一个命名空间的自定义类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43653642/