从 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;
也可能有效。
我们在 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;
也可能有效。