Wpadła mi w ręce książka pt. programowanie wieloplatfromowe z c++ i wxwidgets.
Chciałem odpalić sobie prosty program w visual studio 2019, niestety ugrzązłem na pewnym problemie. Otóż przy konfiguracji projektu w oknie Property Pages nie ma w ogóle zakładki Resources!
Dodam, że zakładki c/c++ też nie było wcześniej dopóki nie utworzyłem pliku z rozszerzeniem .cpp
Czy ktoś spotkał się z podobnym problemem?
Błąd jest taki, że dajesz wszystko w nagłówku, a powinno być tak (w każdym razie tak pamiętam):
main.h
#ifndef INCLUDED_MAIN_H
#define INCLUDED_MAIN_H
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
class MyApp : public wxApp {
public:
virtual bool OnInit();
};
class MyFrame : public wxFrame {
public:
MyFrame(const wxString& title);
};
DECLARE_APP(MyApp)
#endif
main.cpp
#include "main.h"
const wxString appName = "First app using wxWidgets";
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
MyFrame* frame = new MyFrame(appName);
frame->Show(true);
return true;
}
MyFrame::MyFrame(const wxString& title)
:wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(600, 400)
{
CenterOnScreen();
}
Konfiguracji projektu nie sprawdzałem, bo siedzę na Linuksie teraz.
Mimo moich najszczerszych chęci nie udało mi się sprawić, żeby ten projekt zadziałał.Dalej to samo:
1>------ Build started: Project: wxWidgetsApp, Configuration: Release x64 ------
1>main.cpp
1>G:\C++_PROJECTS\wxWidgetsApp\main.cpp(16,18): error C2059: syntax error: ';'
1>G:\C++_PROJECTS\wxWidgetsApp\main.cpp(17,1): error C2059: syntax error: '}'
1>G:\C++_PROJECTS\wxWidgetsApp\main.cpp(18,1): error C2630: ';' found in what should be a comma-separated list
1>G:\C++_PROJECTS\wxWidgetsApp\main.cpp(18,1): error C2612: trailing 'end of file' illegal in base/member initializer list
1>G:\C++_PROJECTS\wxWidgetsApp\main.cpp(18,1): fatal error C1004: unexpected end-of-file found
1>Done building project "wxWidgetsApp.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Zrobiłem tak @_0x666_ jak napisałeś w tym podziale z plikami.
Ogólnie nie rozumiem dlaczego jest tyle bebrania się, żeby jeden framework dołączyć do visual studio. Ilość miejsc, gdzie można popełnić błąd przy konfiguracji jest ogromna. A ja chciałbym po prostu stworzyć szkielet tej appki skonfigurowanej i żeby można to było ściągnąć, zaimportować i zbudować i skompilować na vs studio 2019.
W plikach do ściągnięcia masz przecież plik .props z konfiguracją. W zasadzie nie trzeba ręcznie tego robić. Źródła wyglądają ok, więc coś jest nie tak z konfiguracją projektu.
W opcjach projektu wyłącz prekompilację nagłówków (może coś zmieni).
0x666 napisał(a):
W plikach do ściągnięcia masz przecież plik .props z konfiguracją. W zasadzie nie trzeba ręcznie tego robić. Źródła wyglądają ok, więc coś jest nie tak z konfiguracją projektu.
W opcjach projektu wyłącz prekompilację nagłówków (może coś zmieni).
Zainstalowałem vs 2015, odinstalowałem tamtą wersję wxwidgets i zainstalowałem wersję 3.0.3.
Teraz wchodząc w Property Pages w ogóle nie ma zakładki Resources. Nie rozumiem czemu raz ona jest, a raz nie ma.
EDIT:
Teraz pojawiła się ta zakładka. Zobaczymy co będzie
0x666 napisał(a):
Błąd jest taki, że dajesz wszystko w nagłówku, a powinno być tak (w każdym razie tak pamiętam):
main.h
#ifndef INCLUDED_MAIN_H #define INCLUDED_MAIN_H #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/wx.h" #endif class MyApp : public wxApp { public: virtual bool OnInit(); }; class MyFrame : public wxFrame { public: MyFrame(const wxString& title); }; DECLARE_APP(MyApp) #endif
main.cpp
#include "main.h" const wxString appName = "First app using wxWidgets"; IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { MyFrame* frame = new MyFrame(appName); frame->Show(true); return true; } MyFrame::MyFrame(const wxString& title) :wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(600, 400) { CenterOnScreen(); }
Konfiguracji projektu nie sprawdzałem, bo siedzę na Linuksie teraz.
Zrobiłem nowy projekt w vs 2015, zainstalowałem wersję wxwidget 3.0.3 (a poprzednią odinstalowałem) i wrzuciłem do tych dwóch plików main.cpp i main.h tak jak napisałeś.
Teraz mi wyrzuca praktycznie błąd na błędzie:
Severity Code Description Project File Line Suppression State
Error C2059 syntax error: '}' wxWidgetApp G:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\main.cpp 17
Error (active) __w64 can only be specified on int, long, and pointer types wxWidgetApp c:\wxWidgets-3.0.4\include\wx\defs.h 1301
Error (active) expected a ')' wxWidgetApp g:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\main.cpp 15
Error (active) expected a '{' wxWidgetApp g:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\main.cpp 17
Error C2059 syntax error: ';' wxWidgetApp G:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\main.cpp 16
Error C2630 ';' found in what should be a comma-separated list wxWidgetApp G:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\main.cpp 18
Error C2612 trailing 'end of file' illegal in base/member initializer list wxWidgetApp G:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\main.cpp 18
Error C1004 unexpected end-of-file found wxWidgetApp G:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\main.cpp 18
MyFrame::MyFrame(const wxString& title)
:wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(600, 400)) // <--- brakowało )
{
CenterOnScreen();
}
0x666 napisał(a):
MyFrame::MyFrame(const wxString& title) :wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(600, 400)) // <--- brakowało ) { CenterOnScreen(); }
Rzeczywiście, ale
teraz mam jakiś durny błąd:
Severity Code Description Project File Line Suppression State
Error TRK0005 Failed to locate: "rc.exe". Nie można odnaleźć określonego pliku. wxWidgetApp G:\wxWidgetsProjects\wxWidgetsApp\wxWidgetApp\TRACKER 1
Dobra teraz się skompilowało, ale przy uruchamianiu to mi się pojawia:
https://drive.google.com/open?id=1qjrbgbEoZUCaBzeU9Iji13-JNAicgwC4
Srry, że tak głowę zawracam na święta, ale dopiero teraz mam chwilę, żeby pokodzić trochę
Wygląda jak jakieś niezgodności biblioteki z wersją kompilatora/środowiska. Ciężko powiedzieć.