Преобразование интерфейса телефонной книги из VS 2013 в VS 2017 не работает - PullRequest
0 голосов
/ 03 мая 2018

Мы создали Обратный поиск в телефонной книге в нашем классе. Наша школьная система использует VS 2013 на наших машинах, а я использую 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 ++ и строю графический интерфейс, поэтому понятия не имею, что это значит. Я искал этот форум и читал решения проблем, которые были похожи на это, но они не работали. У кого-нибудь есть идеи по поводу исправления? Спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

Я довольно новичок в 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 создайте проект C32 "Win32".) Если вы хотите изучить управляемый код, я бы использовал 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; также может сработать.

...