我们在课堂上创建了一个反向电话簿查询。我们的学校系统在我们的机器上使用VS 2013,我在家用PC上使用VS 2017。在学校建立的程序在VS 2013上运行良好但是当我用VS 2017加载并试图执行它时,我得到以下三个错误:
Severity Code Description Project File Line Suppression State Error (active) E0442 too few arguments for class template "std::array" GUIPhoneBook c:\Users\diabl\source\repos\GUIPhoneBook\GUIPhoneBook\MyForm.cpp 12
Severity Code Description Project File Line Suppression State Error C2976 'std::array': too few template arguments GUIPhoneBook c:\users\diabl\source\repos\guiphonebook\guiphonebook\myform.cpp 13
Severity Code Description Project File Line Suppression State Error C3699 '^': cannot use this indirection on type 'std::array' GUIPhoneBook c:\users\diabl\source\repos\guiphonebook\guiphonebook\myform.cpp 13
这就是我在MyForm.cpp中的内容
#include "MyForm.h"
#pragma once
using namespace System;
using namespace System::Windows::Forms;
[STAThread]
int Main(array<System::String ^> ^args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew GUIPhoneBook::MyForm());
return 0;
}
我对c ++和构建GUI相当新,所以我不知道这意味着什么。我搜索了这个论坛并阅读了与此类似的问题的解决方案,但它们没有用。有人对修复有任何想法吗?感谢。
答案 0 :(得分:1)
我对c ++很新...
标准&#39;学习语言&#39;警告:这不是你正在编写的C ++,它是C ++ / CLI。 C ++ / CLI是Microsoft的一种语言,旨在允许C#或其他.Net语言与标准C ++进行交互。在这种情况下,C ++ / CLI可以提供两者之间的转换。如果您还在学习C ++,请不要从C ++ / CLI开始。为了有效地用C ++ / CLI编写,人们应该已经知道C ++和C#,然后还有一些东西要学习C ++ / CLI。如果你想学习C ++,坚持使用标准(非托管)C ++。 (在Visual Studio中,创建一个&#34; Win32&#34; C ++项目。)如果您想学习托管代码,那么我会使用C#。
那说......
int Main(array<System::String ^> ^args)
我还没有调查过原因,但由于某种原因,VS2017首先找到std::array
,而VS2013首先找到cli::array
。正如您可能从您收到的错误消息中猜到的那样,这两个类采用不同的模板/泛型参数。 (std::array
采用类型和大小,cli::array
采用类型,并在创建对象时指定大小。)
要解决此问题,您可以在main声明中明确指定cli::
。也可能需要删除using namespace std;
,或者添加using namespace cli;
也可能有效。