c++ - 是否可以避免 C++ 编译器错误 (C2757),其中 2 个不同的头文件包含相同的命名空间和类符号?

标签 c++

我在向现有库实现一些新代码时遇到问题。该库已经引用了一个名为“foo”的类。相同的名称在另一个头文件中用作命名空间,必须包含该头文件才能实现新功能。由于这两个头文件都是遗留代码库的一部分,我无法修改它们。因此,我在这里寻找任何方法来避免编译器错误(C2757:具有此名称的符号已存在,因此该名称不能用作命名空间名称)。我不确定这是否可能。因此,任何帮助都将不胜感激。谢谢

为了清楚起见,这里是该问题的示例代码说明:

标题A.h

class foo
{}

标题B.h

namespace foo
{
class ABC{}
}

标题C.h

#include <HeaderA.h>
#include <HeaderB.h>
using namespace foo;

class Toimplement{
ABC a; //Throws Error C2757
}

最佳答案

您可以尝试以下解决方法:

namespace bar {
    #include "HeaderA.h"
}
#include "HeaderB.h"

...
bar::foo fooObject;
foo::ABC abcObject;

关于c++ - 是否可以避免 C++ 编译器错误 (C2757),其中 2 个不同的头文件包含相同的命名空间和类符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566833/

相关文章:

c++ - 程序不计算记录数

c++ - 库文件结构的常见做法

c++ - 模板类专门针对模板类和其他类型

c++ - 我怎样才能让我的对象重新解释为数组,比如 std::complex?

c++ - Boost Spirit 继承的字符串属性以 ascii 字符填充 vector<int>

c++ - 如果我返回一个 unique_ptr,原始对象会被删除吗?

c++ - 仅在需要时加载 DLL

c++ - 从 vector 数组调用函数

c++ - CreateProcess 不会使用参数启动进程

C++ : Restrict method access in derived class