C++ cli C++/CLI-命名空间和类的不明确符号

C++ cli C++/CLI-命名空间和类的不明确符号,c++-cli,ambiguous,C++ Cli,Ambiguous,我尝试编译一个C++/CLI文件,其中包括一个头文件(本机,第三方),其中定义了一个类“Foo”。此外,我正在通过使用“Bar.dll”使用一个C#dll,其中定义了一个名称空间“Foo”。编译器给出错误C2872“Foo是不明确的符号” 我不知道本机类“Foo”是在哪个命名空间中定义的,因为头文件中的类定义没有嵌套在某个命名空间中。所以我假设类“FoO”可能没有命名空间(C++中可能,不是吗?)否则,我将指定类“Foo”及其命名空间,使其特定于编译器 我可以将“Bar.dll”中使用的名称空间

我尝试编译一个C++/CLI文件,其中包括一个头文件(本机,第三方),其中定义了一个类“Foo”。此外,我正在通过使用“Bar.dll”使用一个C#dll,其中定义了一个名称空间“Foo”。编译器给出错误C2872“Foo是不明确的符号”

我不知道本机类“Foo”是在哪个命名空间中定义的,因为头文件中的类定义没有嵌套在某个命名空间中。所以我假设类“FoO”可能没有命名空间(C++中可能,不是吗?)否则,我将指定类“Foo”及其命名空间,使其特定于编译器

我可以将“Bar.dll”中使用的名称空间重命名为“Foo”,但我正在寻找一种不同的解决方案来保留名称空间。实际上,类和名称空间是不同的元素——但我想对于c++/cli编译器不是这样的

提前Thx
Michbeck

我遇到了一个类似的问题,因为它有一个庞大的专有代码库,修改起来太昂贵了。当我尝试以下方法时,问题似乎突然出现:

using namespace System;
我包含的代码恰好有自己的Enum类,如果您开始使用“System”名称空间,那么这两个名称会冲突。为了解决这个问题,我只需将其放在名称空间{}标题中

namespace MyNamespace
{
    using namespace System;

    ...
}
这可能不适用于#using指令,但可能值得一试

#using "Bar.dll"

namespace MyNamespace
{

    using namespace System;
    using namespace Foo;

    ...
}
namespace FooNamespace = Foo;
typedef Foo FooClass;

我不确定这是否有效,但值得一试

#using "Bar.dll"

namespace MyNamespace
{

    using namespace System;
    using namespace Foo;

    ...
}
namespace FooNamespace = Foo;
typedef Foo FooClass;

namespace指令仅对名称空间有效,对类无效。用typedef反之亦然。您应该能够在代码中使用
FooClass
FooNamespace

除了类“Foo”的typedef(David Yaw提供)之外,还可以通过使用类“Foo”的全局名称空间来解决问题::Foo。因此编译器可以区分这个类和“Bar.dll”中的命名空间“Foo”