Неустраненная внешняя ошибка в Visual C++ 2010 Express

Я делаю свой первый набег на программирование для Windows после неуловимого написания консольных приложений Linux. Я написал простую программу "Hello world" для ознакомления с Visual C++ (2010 Express) и получаю сообщение об ошибке (перечисленное ниже) при попытке построить решение.

Код:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nShowCmd)
{
    MessageBox(NULL,
               L"Hello World!",
               L"Just another Hello World program!",
               MB_ICONEXCLAMATION | MB_OK);

    return 0;
}

Ошибка:

1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>\\lc01users\users\users\grossw\docs\visual studio 2010\Projects\practice_2\Debug\practice_2.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Я видел, как этот вопрос задавался много раз здесь, в StackOverflow, но почти всегда правильное решение по изменению подсистемы с «окна» на «консоль», похоже, применимо только к людям, чьи программы используют простое сообщение для вывода на консоль вместо окно сообщений Windows; Я попытался изменить его, но я получаю ту же самую ошибку в любом случае.

Примечание. За исключением того, что не используется предварительно скомпилированный заголовок, все параметры Visual C++ Express 2010 установлены по умолчанию.

Я получил несколько предупреждений о том, что задаю плохие вопросы, и я знаю, что здесь все строго по какой-то причине, но я надеюсь, что это больше соответствует тому, что вы ищете :)


person user3776749    schedule 25.06.2014    source источник
comment
Вы можете использовать MessageBox как в консоли, так и в приложениях Windows. В любом случае, я не уверен, почему, но кажется, что на этот раз VS хочет, чтобы у вас была функция main, а не WinMain, в приложении Windows. Вы изменили точку входа?   -  person chris    schedule 25.06.2014
comment
Я ничего не менял, кроме как установить для параметра «Предварительно скомпилированный заголовок» значение «Не использовать предварительно скомпилированные заголовки». Я запустил его с этой опцией также по умолчанию (включая заголовочный файл StdAfx.h) и получил ту же ошибку.   -  person user3776749    schedule 26.06.2014
comment
Это не значит, что вам нужно WinMain здесь, поэтому изменение его на int main() должно работать нормально, но, хотя я считаю это маловероятным, мне придется согласиться с ответом ниже, что вы просто нажимаете консольное приложение при создании проекта.   -  person chris    schedule 26.06.2014


Ответы (2)


Скорее всего, при создании проекта (на шаге 3 ниже) у вас было выбрано «Консольное приложение».

При создании проекта обязательно создайте его следующим образом:

  1. Тип проекта: Win32
  2. Подтип проекта: проект Win32 (или консольное приложение, если необходимо)
  3. Создайте ПУСТОЙ проект, но убедитесь, что для типа установлено значение «Приложение Windows».

Как только это будет сделано, «добавьте» новый исходный файл (.cpp) и поместите в него свой код.

Нажмите «F7», и ваша программа должна быть успешно собрана.

person YePhIcK    schedule 25.06.2014
comment
Идеально. Это помогло. Должно быть, были какие-то посторонние файлы шаблонов, которые я не видел и которые причиняли вред. Спасибо! - person user3776749; 26.06.2014
comment
Эта статья может оказаться полезной для ваших первоначальных потребностей в написании приложений для Windows: msdn.microsoft.com /en-us/library/bb384843.aspx - person YePhIcK; 26.06.2014
comment
Верно, но игнорируйте все, что там говорится о TCHAR и _T и все такое, и придерживайтесь широких строк, которые вы используете сейчас. Это не самый лучший C++ для начала, но стиль легко исправить. - person chris; 26.06.2014

#include ‹ windows.h>

интервал main()
{

MessageBox(NULL,

           L"Hello World!",

           L"Just another Hello World program!",

           MB_ICONEXCLAMATION | MB_OK);

return 0;

}

person ANJi    schedule 02.08.2014