Приложение wxwidgets в Visual Studio выдает ошибку «LNK2019 неразрешенный внешний символ» - PullRequest
1 голос
/ 21 января 2020

Я создаю свою первую программу на C ++ и wxwidgets. Когда я пытаюсь скомпилировать проект, я получаю ошибки.

LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

LNK1120 1 unresolved externals

Я сам скомпилировал wxwidgets в Visual Studio.

После компиляции я создал новый пустой проект C ++ в Visual Studio.

Я перешел к настройке и добавлены каталоги:

Свойства конфигурации -> C / C ++ -> Общие -> Дополнительные каталоги включения:

C: \ Users \ user \ source \ repos \ WxWidgets \ включают в себя; C: \ Users \ user \ source \ repos \ wxWidgets \ include \ msv c

Свойства конфигурации -> Linker -> Дополнительные каталоги библиотеки:

C: \ Users \ user \ source \ repos \ wxWidgets \ lib \ vc_lib

Затем я добавил 2 класса, cApp и cMain.

cApp.h

#pragma once

#include "wx/wx.h"
#include "cMain.h"

class cApp : public wxApp
{
public:
    cApp();
    ~cApp();

private: 
    cMain* m_frame1 = nullptr;

public: 
    virtual bool OnInit();
};

cApp. cpp

#include "cApp.h"

wxIMPLEMENT_APP(cApp);

cApp::cApp() {

}

cApp::~cApp() {

}

bool cApp::OnInit() {
    m_frame1 = new cMain();
    m_frame1->Show();

    return true;
}

cMain.h

#pragma once

#include "wx/wx.h"

class cMain : public wxFrame
{
public:
    cMain();
    ~cMain();
};

cMain . cpp

#include "cMain.h"

cMain::cMain() : wxFrame(nullptr, wxID_ANY, "MyProgram") {

}

cMain::~cMain() {

}

1 Ответ

1 голос
/ 22 января 2020

У вас 2 проблемы (после редактирования из-за комментария ниже) следующая проблема:

  1. Вы создаете свое приложение как приложение в режиме консоли, а не как GUI один. Хотя можно также использовать wxWidgets из консольных приложений, вероятно, это не то, что вы пытаетесь сделать, поэтому убедитесь, что для параметра «Linker | System | SubSystem» в диалоговом окне свойств вашего проекта установлено значение «Windows» ".
  2. В вашем коде нет макроса wxIMPLEMENT_APP(cApp);. Опять же, вполне возможно избежать этого, но это, вероятно, не ваша цель, поэтому просто добавьте эту строку. Этот макрос определяет main или WinMain для вашего приложения, в зависимости от платформы.
...