C++ cli 错误:无法在本机堆上动态分配此值类型对象

C++ cli 错误:无法在本机堆上动态分配此值类型对象,c++-cli,clr,C++ Cli,Clr,我正在尝试动态创建System::DateTime的实例,并将其分配给System::DateTime gDate,以防用户使用'p'参数。但是,我得到了代码片段后面显示的错误 case 'P': gDate=new DateTime(std::stoi(year), std::stoi(month), std::stoi(day)); cout << "Persian Date is: " << pDate.GetDayOfMonth(g

我正在尝试动态创建
System::DateTime
的实例,并将其分配给
System::DateTime gDate
,以防用户使用'p'参数。但是,我得到了代码片段后面显示的错误

case 'P':
  gDate=new DateTime(std::stoi(year), std::stoi(month), std::stoi(day));            
  cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
       pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
  break;
但是,我收到了错误,
error C2360“gDate”的初始化被“case”标签跳过了

如前所述,您可以在堆栈上创建
DateTime
,但不能在堆上创建

试着这样做:

DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
     pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
break;
如前所述,您可以在堆栈上创建
DateTime
,但不能在堆上创建

试着这样做:

DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
     pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
break;
如前所述,您可以在堆栈上创建
DateTime
,但不能在堆上创建

试着这样做:

DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
     pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
break;
如前所述,您可以在堆栈上创建
DateTime
,但不能在堆上创建

试着这样做:

DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
     pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
break;

如果您不需要gDate作为指针,而且几乎肯定不需要,请尝试:

 case 'P':
     {
         DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
         cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
                  pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
     }
     break;
分配它需要

gDate = gcnew DateTime(std::stoi(year), std::stoi(month), std::stoi(day));  

当没有对该分配对象的进一步引用时,.Net运行时的垃圾回收器会将其销毁。

如果不需要gDate作为指针,而且几乎肯定不需要,请尝试:

 case 'P':
     {
         DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
         cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
                  pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
     }
     break;
分配它需要

gDate = gcnew DateTime(std::stoi(year), std::stoi(month), std::stoi(day));  

当没有对该分配对象的进一步引用时,.Net运行时的垃圾回收器会将其销毁。

如果不需要gDate作为指针,而且几乎肯定不需要,请尝试:

 case 'P':
     {
         DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
         cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
                  pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
     }
     break;
分配它需要

gDate = gcnew DateTime(std::stoi(year), std::stoi(month), std::stoi(day));  

当没有对该分配对象的进一步引用时,.Net运行时的垃圾回收器会将其销毁。

如果不需要gDate作为指针,而且几乎肯定不需要,请尝试:

 case 'P':
     {
         DateTime gDate(std::stoi(year), std::stoi(month), std::stoi(day));          
         cout << "Persian Date is: " << pDate.GetDayOfMonth(gDate) << "/" <<
                  pDate.GetMonth (gDate) << "/" << pDate.GetYear(gDate) << endl;
     }
     break;
分配它需要

gDate = gcnew DateTime(std::stoi(year), std::stoi(month), std::stoi(day));  


当没有进一步引用这个分配的对象时,GDATE和GDATE的任何副本都超出了范围,.NET运行时的垃圾收集器将销毁它。

当CLI/CLR库返回的大多数东西作为指针使用时需要CLI/CLR语义和垃圾回收。C++删除了标记。这是C++/CLIOST,从CLI/CLR库中返回的东西需要使用CLI/CLR语义和垃圾收集,当使用指针时。移除C++标签。这是C++/CLIOST,从CLI/CLR库中返回的东西需要使用CLI/CLR语义和垃圾收集,当使用指针时。移除C++标签。这是C++/CLIOST,从CLI/CLR库中返回的东西需要使用CLI/CLR语义和垃圾收集,当使用指针时。移除C++标签。这是C++/cli当我使用
DateTime gDate([parameters…])
的常规定义时,我得到错误“初始化gDate被'case'标签跳过”。大括号是必需的。在未定义作用域的情况下,不能使用作用域变量。不要将
gcnew
DateTime
一起使用,因为它是一种值类型。如果您使用
gcnew
您正在创建一个装箱值(即跟踪值类型的托管引用),这不是您99.99%的时间想要的,只是浪费资源。只需在堆栈上使用
DateTime
,并使用复制语义-这个答案中的最后一个片段就是正确的方法。@Lucastzesniewski有很多优点。将进行编辑以敲打此主页。当我使用
DateTime gDate([parameters…])
的常规定义时,我得到错误“初始化gDate被'case'标签跳过”。大括号是必需的。在未定义作用域的情况下,不能使用作用域变量。不要将
gcnew
DateTime
一起使用,因为它是一种值类型。如果您使用
gcnew
您正在创建一个装箱值(即跟踪值类型的托管引用),这不是您99.99%的时间想要的,只是浪费资源。只需在堆栈上使用
DateTime
,并使用复制语义-这个答案中的最后一个片段就是正确的方法。@Lucastzesniewski有很多优点。将进行编辑以敲打此主页。当我使用
DateTime gDate([parameters…])
的常规定义时,我得到错误“初始化gDate被'case'标签跳过”。大括号是必需的。在未定义作用域的情况下,不能使用作用域变量。不要将
gcnew
DateTime
一起使用,因为它是一种值类型。如果您使用
gcnew
您正在创建一个装箱值(即跟踪值类型的托管引用),这不是您99.99%的时间想要的,只是浪费资源。只需在堆栈上使用
DateTime
,并使用复制语义-这个答案中的最后一个片段就是正确的方法。@Lucastzesniewski有很多优点。将进行编辑以敲打此主页。当我使用
DateTime gDate([parameters…])
的常规定义时,我得到错误“初始化gDate被'case'标签跳过”。大括号是必需的。在未定义作用域的情况下,不能使用作用域变量。不要将
gcnew
DateTime
一起使用,因为它是一种值类型。如果您使用
gcnew
您正在创建一个装箱值(即跟踪值类型的托管引用),这不是您99.99%的时间想要的,只是浪费资源。只需在堆栈上使用
DateTime
,并使用复制语义-这个答案中的最后一个片段就是正确的方法。@Lucastzesniewski有很多优点。将编辑以锤击此主页。