我正在使用一个名为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.hsome_action.h中添加以下正向声明:

namespace custom { class DataType; }


在需要定义.cppDataType文件中,包括"custom/datatype.h"



如果custom::DataType是类型别名(即typedef),则需要包括标题。没有一种方法可以向前声明类型别名:请参阅this question & answers以获取相关信息。

关于c++ - 在头文件中前向声明另一个命名空间的自定义类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43653642/

10-11 18:26