"error C2228: left of '.ToString' must have class/struct/union"



所以我最近获得了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'的左侧必须有类/结构/联合"。考虑到这一切在切换到Visual Studio 2012之前都编译得很好,我不确定问题是什么!:(

此外,当我尝试运行上一个成功的构建(使用Visual Studio 2010构建)时,我在启动时遇到运行时错误,说"由于您的计算机中缺少MSVCR100D.dll,程序无法启动。"我知道这可能与当前的问题无关,但有人知道为什么会发生这种情况吗?

谢谢你的帮助,Alex

"错误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使用的C运行时与VS2010不同。MSVCR100D是Microsoft Visual C运行时版本10.0,调试版本。此DLL是与VS2010一起安装的,没有其他方法可以获取它。如果您有旧的Release内部版本,则可以从Microsoft(x86或x64)获取运行时可重新分发文件,并安装该文件以使其运行。(这将是MSVCR100.dll,末尾没有"D"。)