C++ cli 使用C++/CLI

C++ cli 使用C++/CLI,c++-cli,command-line-interface,C++ Cli,Command Line Interface,我正在玩一个C++/CLI应用程序,它与我的Isis2(C#.NET)库通信。在下面的代码中,我得到错误“Warning 3 C4538:'cli::array^”:不支持此类型的常量/易失性限定符”。我突出显示了抛出这个的行。我很困惑:它没有数组,也没有使用常量或volatile!有什么建议吗 // CPlusPlus.cpp : main project file. #include "stdafx.h" #using <IsisLib.dll> using namespace

我正在玩一个C++/CLI应用程序,它与我的Isis2(C#.NET)库通信。在下面的代码中,我得到错误“Warning 3 C4538:'cli::array^”:不支持此类型的常量/易失性限定符”。我突出显示了抛出这个的行。我很困惑:它没有数组,也没有使用常量或volatile!有什么建议吗

// CPlusPlus.cpp : main project file.

#include "stdafx.h"
#using <IsisLib.dll>
using namespace Isis;
using namespace System;

void GotNewView(View^ v)
{
   Console::WriteLine("Got a new view: " + v->ToString());
}

public delegate void GotAnInt_T (int i);
void GotAnInt(int i)
{
   Console::WriteLine("Got an int: {0}", i);
}

public delegate void GotTwo_T (String ^s, double d);
void GotTwo(String^ s, double d)
{
   Console::WriteLine("Got a string: <{0}> and a double: {1}", s, d);
}

public delegate void SendsReply_T(int i);
void SendsReply(int i)
{
   thisGroup()->Reply(-i);
}

int main(array<System::String ^> ^args)
{ 
   IsisSystem::Start();
   Group ^g = gcnew Group("test");       <============= THIS LINE
   g->RegisterViewHandler(gcnew ViewHandler(GotNewView));
   g->Handlers[0] += gcnew GotAnInt_T(GotAnInt);
   g->Handlers[0] += gcnew GotTwo_T(GotTwo);
   g->Handlers[1] += gcnew SendsReply_T(SendsReply);
   g->Join();
   g->Send((int^)0, 12345);
   g->Send((int^)0, "Aardvarks are animals", 78.91);
   Console::WriteLine("After Send, testing Query");
   Collections::Generic::List<int>^ results = gcnew Collections::Generic::List<int>();
   int nr = g->Query(Group::ALL, 1, 6543, gcnew EOLMarker(), results);
   IsisSystem::WaitForever();
   return 0;
}
//CPlusPlus.cpp:主项目文件。
#包括“stdafx.h”
#使用
使用名称空间Isis;
使用名称空间系统;
void GotNewView(视图^v)
{
控制台::WriteLine(“获得了一个新视图:+v->ToString());
}
公共代表无效GotAnInt_T(int i);
void GotAnInt(int i)
{
控制台::WriteLine(“得到一个int:{0}”,i);
}
public delegate void gotwo_T(字符串^s,双d);
void gotwo(字符串^s,双d)
{
控制台::WriteLine(“得到一个字符串:和一个双精度:{1}”,s,d);
}
公共代表无效发送报告(int i);
无效发送重复(int i)
{
thisGroup()->回复(-i);
}
int main(数组^args)
{ 
IsisSystem::Start();
Group ^g=gcnew Group(“测试”);RegisterViewHandler(gcnew ViewHandler(GotNewView));
g->Handlers[0]+=gcnew GotAnInt_T(GotAnInt);
g->Handlers[0]+=gcnew gottow\u T(gottow);
g->Handlers[1]+=gcnewsendsreply\u T(SendsReply);
g->Join();
g->Send((int^)012345);
g->Send((int^)0,“土豚是动物”,78.91);
控制台::WriteLine(“发送后,测试查询”);
Collections::Generic::List^results=gcnew Collections::Generic::List();
int nr=g->Query(组::ALL,16543,gcnew EOLMarker(),results);
IsisSystem::WaitForever();
返回0;
}

这是一个已知的编译器错误:它警告
组的易失性数组成员。它不应该那样做

建议的解决方法是禁用警告:

#pragma warning (disable: 4538)
可能只对有问题的代码行禁用警告,尽管我不是100%确定,因为C++/CLI代码中没有导致此问题的内容。您可以尝试:

#pragma warning (push)
#pragma warning (disable: 4538)
Group^ g = gcnew Group("test");
#pragma warning (pop)

您的
类型是否有易变的数组类型成员?是的,在C#代码中,我有一个声明为易变的布尔向量。所以有一个foo字段,使得g->foo是易变的。但是,如果我去掉这个任务,只做gcnewgroup(“Foo”),错误就会消失。所以我假设这个问题和任务有关。。。我错了吗?不公平!我发布了一个关于什么是编译器错误的问题,有人把这个问题称为“研究不足”?我要问的问题是:你是如何研究的?我写了一些代码,如果你愿意的话,可以让你重现这个问题。对我来说,这比断章取义的代码片段要好得多,特别是因为这是触发错误警告消息的正确代码!我不能回答你的问题,因为我不是投反对票的人,但在我看来,有些人对他们不理解的问题投了反对票(我知道有几个主持人倾向于对他们不理解的话题进行封闭式提问,我在好几次场合对此大声抱怨). 简言之,一篇文章的质量与得票数之间几乎没有关联(如果有的话)。在任何情况下,+1,因为这是一个好问题,我不知道有任何其他在线资源提到这个问题。谢谢,詹姆斯!像CARMITHEXPLAMA这样做的技巧,但是你介意引用你的来源,这是一个“编译器错误”?@ AjHUDDY我是源(我在微软上的Visual C++团队工作)。编译器错误地发出有关从元数据导入的私有成员的警告。我不知道是否已经修好了(我现在不在办公室核实)。