命名空间和类的模糊符号

我尝试编译一个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。 你应该能够在代码中使用FooClassFooNamespace


我遇到了一个巨大的专有代码库,类似的问题会变得太昂贵。 当我尝试以下操作时,该问题似乎出现在我的面前:

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

上一篇: Ambiguous symbol of a namespace and a class

下一篇: Implementing an interface declared in C# from C++/CLI