none
Visual Studio 2010和2013中C++CLR里面枚举有何区别? RRS feed

  • 问题

  • 我按照Ivory Horton's Beginning Visual C++2010上面说的写出来的代码为什么在2013里面运行不了?

    求解。

    下面代码,程序提示说:

    1. 错误 1 error C2665: “System::Console::WriteLine”: 19 个重载中没有一个可以转换所有参数类型 C:\Users\浩然\Documents\Visual Studio 2013\Projects\test2_06_1\test2_06_1\test2_06_1.cpp 16 1 test2_06_1
    2. 错误 2 error C2676: 二进制“+”:“Month”不定义该运算符或到预定义运算符可接收的类型的转换 C:\Users\浩然\Documents\Visual Studio 2013\Projects\test2_06_1\test2_06_1\test2_06_1.cpp 17 1 test2_06_1
    #include "stdafx.h"
    
    using namespace System;
    
    enum class Month{January=1, Febrary, March, April, May, June, July, August, September, October, November, December};
    
    int main(array<System::String ^> ^args)
    {
    	Month month = Month::January;
    	int value;
    	for (int i = 0; i < 12; ++i)
    	{
    		value = safe_cast<int>(month);
    		Console::WriteLine(L"Month is {0} and value is {1}", month, value);
    		month=month+Month::Febrary;
    	}
    
        return 0;
    }

    2013年11月6日 3:13

答案

  • 你好:

    编译器错误 C2665: function”: number1 个重载中没有一个可以转换参数 number2 (从“type”类型)  

    该重载函数的参数无法转换为所需类型。            

    可能的解决方案:1)提供转换运算符。2)使用显式转换。

    编译器错误 C2676:二元“operator”:“type”不定义此运算符或到预定义运算符可接收的类型的转换                 

    若要使用该运算符,必须针对指定类型将其重载,或者定义一个到某个类型(该运算符已针对此类型进行了定义)的转换。          

    从MSDN visual studio 2013 C++ 枚举声明中,我们知道,我们不可以把一个int直接转换成Month,也不能把一个Month直接转换成int。

    详细信息,请参考:

    http://msdn.microsoft.com/zh-cn/library/2dzy4k6e(v=vs.120).aspx

    http://msdn.microsoft.com/zh-cn/library/2dzy4k6e(v=vs.100).aspx 


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. &lt;br/&gt; Click &lt;a href=&quot;http://support.microsoft.com/common/survey.aspx?showpage=1&amp;scid=sw%3Ben%3B3559&amp;theme=tech&quot;&gt; HERE&lt;/a&gt; to participate the survey.



    2013年11月7日 3:15
    版主