Syntax C++/枚举的CLI语法在2010年和2012年之间更改
我继承了一个解决方案,它在一个C API DLL和一个C#GUI周围有一个C++/CLI包装器。C++/CLI包装最初是使用VisualStudio 2010创建的,它是使用VisualStudio 2012创建的GUI和解决方案。当时未升级C++/CLI项目。在C++/CLI项目中,有一个枚举定义如下:Syntax C++/枚举的CLI语法在2010年和2012年之间更改,syntax,c++-cli,enumeration,Syntax,C++ Cli,Enumeration,我继承了一个解决方案,它在一个C API DLL和一个C#GUI周围有一个C++/CLI包装器。C++/CLI包装最初是使用VisualStudio 2010创建的,它是使用VisualStudio 2012创建的GUI和解决方案。当时未升级C++/CLI项目。在C++/CLI项目中,有一个枚举定义如下: enum class DataCommands { Read, Write }; String::Format("Data Command {0}", Command.ToStrin
enum class DataCommands
{
Read,
Write
};
String::Format("Data Command {0}", Command.ToString() );
在后面的代码中,我将记录调用了哪个命令。为此,我创建了如下字符串:
enum class DataCommands
{
Read,
Write
};
String::Format("Data Command {0}", Command.ToString() );
在我最近尝试将C++/CLI项目的目标更改为2012年(v110)之前,这一切都很好。然后,当我尝试编译项目时,我得到了错误:
Error 1 error C2228: left of '.ToString' must have class/struct/union C:\Path\To\File\FileName.cpp 51 1 WrapperProject
我尝试将
替换为->
,但也不起作用。不知道如何解决这个问题,也不知道为什么会改变。如果你能给我指出正确的资源,我很乐意阅读
提前感谢是的,这确实是VS2012及以上版本中的一个问题。新的C++11语言规范采用了一些特定于C++/CLI的语法。例如
override
、nullptr
和enum类
。编译器不再能够区分托管枚举和本机枚举之间的区别,不幸的是,即使/clr有效,编译器也默认为本机风格
解决方法如中所述,添加访问说明符以强制与有效本机语法不匹配:
private enum class DataCommands
{
Read,
Write
};
“上下文关键字”enum类
现在在本机C++11和C++/CLI之间不明确。请尝试使用公共枚举类(或其他访问修饰符)。