从VS 2013到VS 2017的电话簿GUI转换无效

时间:2018-05-03 05:04:10

标签: visual-studio visual-studio-2013 visual-studio-2017 c++-cli

我们在课堂上创建了一个反向电话簿查询。我们的学校系统在我们的机器上使用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相当新,所以我不知道这意味着什么。我搜索了这个论坛并阅读了与此类似的问题的解决方案,但它们没有用。有人对修复有任何想法吗?感谢。

1 个答案:

答案 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;也可能有效。