首页 > 解决方案 > 从 VS 2013 到 VS 2017 的电话簿 GUI 转换不起作用

问题描述

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

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

解决方案


我对c ++相当陌生......

标准的“学习语言”警告:这不是您正在编写的 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第一个找到的。正如您可能从收到的错误消息中猜到的那样,这两个类采用不同的模板/通用参数。(std::array接受类型和大小,cli::array接受类型并在创建对象时指定大小。)

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


推荐阅读