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

Posted

技术标签:

【中文标题】从 VS 2013 到 VS 2017 的电话簿 GUI 转换不起作用【英文标题】:Phonebook GUI Conversion from VS 2013 to VS 2017 not working 【发布时间】:2018-05-03 05:04:10 【问题描述】:

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

【问题讨论】:

错误信息指向std::array,但您显示的代码似乎在任何地方都没有使用std::array,这表明您显示的代码可能与错误,因此您可能需要找到实际导致错误的代码,然后我们才能提供更多帮助。 好的,我将添加您可能认为存在问题的 MyForm.h。 错误信息显示在 MyForm.cpp 的第 12 行或第 13 行。 我发布的第一个代码是 MyForm.cpp 中的所有内容,没有其他内容。我刚刚尝试了 David Yaws 的建议,它奏效了。 【参考方案1】:

我对 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 接受类型并且在创建对象时指定大小。)

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

【讨论】:

很棒的人,它成功了。我也会让我的教授知道这个小技巧,我真的很感激。我们还没有讨论 CLI,但我相信随着我继续学习 C++,我们会讨论的。

以上是关于从 VS 2013 到 VS 2017 的电话簿 GUI 转换不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Windows10上安装VS2017社区版操作步骤

将 C++ ATL 可执行应用程序从 VS2003 迁移到 VS2013

Visual Studio 安装检测内存工具-Visual Leak Detetctor。(适用于VS2013VS2015VS2017VS2019VS2022版本)

是否可以拥有向后兼容 vs2013 和 vs2017 的 vs 项目?

VS2017密钥

将 C# 项目从 VS 2005 移动到 VS 2013 后出现编译器错误