命名空间和类的模糊符号
我尝试编译一个C ++ / CLI文件,其中包含一个头文件(本机,第三方),其中定义了一个类“Foo”。 此外,我通过#using“Bar.dll”使用C#dll,其中命名空间“Foo”已定义。 编译器给出错误C2872“Foo是不明确的符号”。
我不知道在哪个命名空间中,本地类“Foo”被定义为头文件中的类定义没有嵌套在某个命名空间中。 所以我假设类“Foo”可能不在命名空间中(这在C ++中是可行的,不是吗?)。 否则,我会用它的命名空间来指定类“Foo”,以使它对于编译器是特定的。
我有可能重命名“Bar.dll”中使用的命名空间“Foo”,但我正在寻找一个不同的解决方案来保持命名空间。 实际上,一个类和一个命名空间是不同的元素 - 但我猜不是为了c ++ / cli编译器?
Thx提前Michbach
我不确定这是否可行,但值得一试。
namespace FooNamespace = Foo;
typedef Foo FooClass;
命名空间指令只对命名空间有效,不适用于类。 反之亦然与typedef。 你应该能够在代码中使用FooClass
和FooNamespace
。
我遇到了一个巨大的专有代码库,类似的问题会变得太昂贵。 当我尝试以下操作时,该问题似乎出现在我的面前:
using namespace System;
我所包含的代码恰好有自己的Enum类,如果您开始使用“System”命名空间,那么这两个名称会发生冲突。 为了解决这个问题,我简单地把它放在命名空间标题里面。
namespace MyNamespace
{
using namespace System;
...
}
这可能不适用于#using指令,但它可能值得一试。
#using "Bar.dll"
namespace MyNamespace
{
using namespace System;
using namespace Foo;
...
}
除了类“Foo”的typedef(Courtesy David Yaw)之外,问题可以通过使用类“Foo”的全局命名空间来解决::: Foo。 所以编译器可以区分这个类和“Bar.dll”中的命名空间“Foo”
链接地址: http://www.djcxy.com/p/59609.html