gpt4 book ai didi

c++ - 编译问题——类型定义、前向声明、 namespace ?

转载 作者:行者123 更新时间:2023-11-28 01:00:30 27 4
gpt4 key购买 nike

我正试图帮助同事编译一些东西 - 本质上,他试图减少我们需要从更大的软件系统制作的小型可执行文件的依赖性。

我不确定我是否可以完全解释这个问题,因为我不完全理解它......但我将展示这里发生的事情:

库 A: 文件:A.h

namespace CF {
typedef sometype B;
};

库 C: 文件 C.h

//Forward declare Class
class CF::B;

Class D {
public:
B* UseB();
};

库 C: 文件 C.cpp

#include "C.h"
#include "A.h"
using CF::B;

B* D::UseB()
{
return new B;
}

抱歉,我知道这看起来有点疯狂,但我已尝试从我们实际处理的文件集中简化它。

我们通常会在 CF::B 上遇到多重定义错误,或者当我们使用代码并对其进行更改时,有时在 CPP 文件中它无法识别 CF::B 的类型。

我想我的第一个问题是......我可以像我们尝试过的那样转发声明 typedef 吗,或者是否有其他方法来处理 B 是 CF 命名空间中的 typedef 的事实,而我们不想直接包含在C.h文件中?

最佳答案

这可能对您有帮助:

嗯:

#ifndef NAMESPACE_A
#define NAMESPACE_A

namespace A
{
class B
{
public: int i;
};
}
#endif

c.h:

#ifndef NAMESPACE_A
#define NAMESPACE_A
namespace A
{
class B;
}
#endif

class D
{
public:
A::B* UseB();
};

主要.cpp:

#include "a.h"
#include "c.h"
using A::B;

B* D::UseB()
{
return new B();
}

int main(int argc, char* argv[])
{
D* d = new D();
B* b = d->UseB();
b->i = 1;
return 0;
}

...对我来说很好用 ;)

关于c++ - 编译问题——类型定义、前向声明、 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008726/

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