【发布时间】:2017-09-25 00:06:22
【问题描述】:
我正在使用一个名为 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
{
...
}
除了在action.h 中包含"custom/datatype.h" 之外,还有什么适当的方法可以在action.h 和some_action.h 中转发声明DataType?
【问题讨论】:
-
你的代码能编译吗?在 action.h 中,您至少需要
DataType的前向声明 -
@tobi303 我的代码确实无法编译。这就是为什么我要问如何处理这个问题。如果我按当前的方式编译代码,编译器会认为头文件中的
custom和DataType未定义。如果我按照 Vittorio Romeo 的回复中的建议进行前向声明,我会收到另一个错误。 (有关实际错误,请参阅我对他的回复的评论) -
在这种情况下,您应该在问题中包含错误消息
标签: c++