C++ cli 如何处理';对象';:visualstudio中的模糊符号

C++ cli 如何处理';对象';:visualstudio中的模糊符号,c++-cli,wrapper,ambiguous,C++ Cli,Wrapper,Ambiguous,我正在为本机C代码创建一个C++/CLI包装器,它有自己的Objecttypedef,并且在链接时收到C2872'Object':不明确的符号错误。编译器输出为: 1>C:\src\OS_kernel.h(27): error C2872: 'Object': ambiguous symbol 1>C:\src\OS_types.h(261): note: could be 'ObjectStruct *Object' 1>C:\src\OS_kernel.h(27): n

我正在为本机C代码创建一个C++/CLI包装器,它有自己的
Object
typedef,并且在链接时收到
C2872'Object':不明确的符号
错误。编译器输出为:

1>C:\src\OS_kernel.h(27): error C2872: 'Object': ambiguous symbol 
1>C:\src\OS_types.h(261): note: could be 'ObjectStruct *Object' 
1>C:\src\OS_kernel.h(27): note: or       'System::Object'
值得一提的是,为了C++/CLI包装器的目的,我正在模拟这个本机C代码;不确定这是否打开了一个潜在的解决方案,如果没有可用的源代码,该解决方案将不可用。我猜有一种方法可以指定代码要使用的定义,但我不知道如何指定。可能吗?我想将其指定为使用
ObjectStruct*对象

如果我不必修改模拟代码,那就太好了,因为它可能是数百或数千个单独的地方


另外,对于本机库正在使用的其他类型,例如
Buffer
Boolean

好的,我也收到了这个错误,因为您在OS_kernel.h中得到了这个错误,我猜这是您正在包装的C代码的一部分

显然,一种可能的解决方案是将名称
对象
视为保留字,并编辑您的C代码以不使用它。有人可能会说这是最正确的解决方案,但这可能是不可能的

根据你如何引用C代码,编译它为C++是合理的,并把它完全放在一个命名空间内。这样,当C代码(现在C++代码)使用<代码>对象< /code >时,它将在其命名空间内看到Type,并且您可以选择引用代码中的任一命名空间。p>


您从库的头文件中得到这个错误,这一事实向我表明,您有一个使用名称空间系统的
指令,并且库头文件的
#include
位于使用指令之后。考虑使用命名空间系统删除<代码>;<代码>,或者至少将其移动到
#include
之后。这样,您就不会在库的头文件中看到这个错误,您只需要在代码中处理它。

好的,既然您在OS_kernel.h中看到了这个错误,我猜这是您正在包装的C代码的一部分

显然,一种可能的解决方案是将名称
对象
视为保留字,并编辑您的C代码以不使用它。有人可能会说这是最正确的解决方案,但这可能是不可能的

根据你如何引用C代码,编译它为C++是合理的,并把它完全放在一个命名空间内。这样,当C代码(现在C++代码)使用<代码>对象< /code >时,它将在其命名空间内看到Type,并且您可以选择引用代码中的任一命名空间。p>


您从库的头文件中得到这个错误,这一事实向我表明,您有一个使用名称空间系统的
指令,并且库头文件的
#include
位于使用指令之后。考虑使用命名空间系统删除<代码>;<代码>,或者至少将其移动到
#include
之后。这样,您就不会在库的标题中出现该错误,您只需要在代码中处理它。

您应该能够使用带有范围解析操作符的
::Object
来引用全局范围C
对象。这很有效!遗憾的是,这个解决方案意味着我需要触摸模拟代码中出现此模糊错误的每个地方。您应该能够使用范围解析操作符
,使用
,以引用全局范围C
对象
。这很有效!不幸的是,这个解决方案意味着我需要触及模拟代码中出现这种模糊错误的每个地方。谢谢啊,关于使用名称空间系统删除
的好建议。谢谢