gpt4 book ai didi

c++ - 在头文件中前向声明另一个命名空间的自定义类型

转载 作者:行者123 更新时间:2023-11-27 23:54:30 24 4
gpt4 key购买 nike

我正在使用名为 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
{
...
}

除了包括 "custom/datatype.h"action.h 中?

最佳答案

Is there any proper way to define DataType in action.h and some_action.h other than including "custom/datatype.h" in action.h?

您可能不想“定义” DataType,而是"forward declare"它代替。这允许您让编译器知道稍后将定义的 custom::DataType

您可以按如下方式实现。在 action.hsome_action.h 中添加以下前向声明:

namespace custom { class DataType; }

在您需要定义DataType.cpp 文件中,包括“custom/datatype.h”


如果 custom::DataType 是一个类型别名 (即 typedef),您需要包含 header 。没有一种前向声明类型别名的方法:参见 this question & answers获取相关信息。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com