从 VS 2013 到 VS 2017 的电话簿 GUI 转换不起作用

Phonebook GUI Conversion from VS 2013 to VS 2017 not working

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

I am fairly new to c++...

标准 'learning the language' 警告:这不是您正在编写的 C++,而是 C++/CLI。 C++/CLI 是 Microsoft 的一种语言,旨在允许 C# 或其他 .Net 语言与标准 C++ 进行交互。在这种情况下,C++/CLI 可以提供两者之间的转换。如果您仍在学习 C++,请不要从 C++/CLI 开始。为了有效地用 C++/CLI 编写,一个人应该已经了解 C++ 和 C#,然后还有一些东西需要学习 C++/CLI。如果您想学习 C++,请坚持使用标准(非托管)C++。 (在 Visual Studio 中创建一个 "Win32" C++ 项目。)如果你想学习托管代码,那么我会使用 C#。


也就是说...

int Main(array<System::String ^> ^args)

我没有研究为什么,但是由于某种原因VS2017首先找到std::array,而VS2013首先找到cli::array。您可能会从收到的错误消息中猜到,这两个 类 采用不同的 template/generic 参数。 (std::array 采用类型和大小,cli::array 采用类型和大小在创建对象时指定。)

要解决此问题,您可以在 main 的声明中显式指定 cli::。可能还有一个 using namespace std; 需要删除,或者添加 using namespace cli; 也可能有效。