“错误C2228:'.ToString'的左边必须有class / struct / union”

时间:2013-11-29 20:32:52

标签: visual-studio-2012 c++-cli

所以我最近获得了Visual Studio 2012.我将Visual Studio 2010解决方案转换为Visual Studio 2012项目。它在我转换之前就已经开始了。

我有这行代码:

this->Text = global::ProjectName + " (" + global::Type.ToString() + ") - Path Creator 2.0";

其中global :: Type为:

ref class global {
public:
    static Rct3PathType Type;
    ...
};

...而Rct3PathType是:

enum class Rct3PathType {
    Basic = 0x02060206,
    Extended = 0x05060506,
    Queue = 0x01070107
};

我在编译时得到一个错误,我曾调用global :: Type.ToString()说“错误C2228:'.ToString'的左边必须有class / struct / union”。考虑到这一切都完全编译好在转换到Visual Studio 2012之前,我不确定是什么问题! :(

此外,当我尝试运行上一次成功构建(使用Visual Studio 2010构建)时,我在启动时遇到运行时错误,说“程序无法启动因为您的计算机缺少MSVCR100D.dll”。我知道这可能与手头的问题无关,但是有谁知道为什么会发生这种情况呢?

感谢您的帮助, 亚历

1 个答案:

答案 0 :(得分:3)

“错误C2228:'.ToString'的左边必须有class / struct / union”:enum class也是C ++ 11枚举的语法。要使其成为C ++ / CLI枚举,请为其提供一个可访问性说明符,这在C ++ 11枚举中是不允许的。换句话说,private enum classpublic enum class会将其从C ++ 11枚举更改为C ++ / CLI枚举。这在VS2010中不是问题,因为它不支持C ++ 11枚举。

“程序无法启动,因为您的计算机缺少MSVCR100D.dll。”:VS2012使用与VS2010不同的C运行时。 MSVCR100D是Microsoft Visual C运行时版本10.0,调试版本。这个DLL与VS2010一起安装,没有其他方法可以获得它。如果您有旧的发布版本,则可以从Microsoft(x86x64)获取运行时可再发行组件,并安装它以使其运行。 (那将是MSVCR100.dll,最后没有“D”。)