Fehler beim kompilieren
-
Hallo,
ich ich habe mir ein Buch gekauft um programmieren zu lernen nun habe ich das Problem, dass eins der Beispiele aus dem Buch nicht kompilieren will. Es soll nur ein einfaches Fenster erzeugt werden und ich habe es schon unter win7 64 bit und winXP 32bit mit VS 8 und 10 versucht aber nix hat funktioniert und es war immer der selbe Fehler. hier mal der Quellcode:// C++ für Spieleprogrammierer // Listing 10.1 // Ein Windows-Grundgerüst // #include <windows.h> // Prototyp der Callback-Funktion LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); // Hauptprogramm // int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften HWND hWnd; // Fenster-Handle MSG message; // Nachricht // Der Klassen-Name des Fensters ist frei wählbar const char szClassName[] = "Erstes Fenster"; // Struktur mit gewünschten Eigenschaften füllen // // Größe der Struktur zwischenspeichern windowclass.cbSize = sizeof (WNDCLASSEX); // Fenster soll beim Verschieben neu gezeichnet werden windowclass.style = CS_HREDRAW | CS_VREDRAW; // Zeiger auf Callback-Funktion windowclass.lpfnWndProc = WindowProc; // Keine erweiterten Einstellungen windowclass.cbClsExtra = 0; windowclass.cbWndExtra = 0; // Instanz speichern windowclass.hInstance = hInst; // Icons und Cursor festlegen windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION); windowclass.hCursor = LoadCursor (NULL, IDC_ARROW); // Hintergrundfarbe festlegen windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1; // Ein Menü brauchen wir nicht windowclass.lpszMenuName = NULL; // Klassenname angeben windowclass.lpszClassName = szClassName; // Fensterklasse registrieren if (!RegisterClassEx (&windowclass) ) return (0); // Das Fenster erzeugen hWnd = CreateWindowEx (NULL, szClassName, "Das erste Fenster!", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 250, NULL, NULL, hInst, NULL); // Prüfen, ob alles glatt ging if (hWnd == NULL) return (0); // Der "Herzschlag" des Programms. // Hier werden alle Nachrichten abgeholt, // übersetzt und weitergeleitet. while (GetMessage (&message, NULL, 0, 0) ) { TranslateMessage (&message); DispatchMessage (&message); } // Programm beenden return (int)(message.wParam); } // WinMain // Callback-Funktion zur Nachrichtenverarbeitung // LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { // Messages auswerten switch (message) { // Fenster schließen? (Auch Alt-F4) case WM_DESTROY: { // Nachricht zum Beenden schicken PostQuitMessage (0); return (0); } // Wurde eine Taste gedrückt? case WM_KEYDOWN: { // Ja, also je nach Taste verzweigen switch (wParam) { // Wurde "Escape" gedrückt? case VK_ESCAPE: { // Ja, also Nachricht zum Beenden schicken PostQuitMessage (0); return (0); } } } break; } // Die Nachricht wurde nicht von uns verarbeitet, also // von Windows verarbeiten lassen. return (DefWindowProc (hWnd, message, wParam, lParam) ); } // WindowProc
und das ist der Fehler den ich immer wieder erhalte:
1>..\Listing_10_1.cpp(54): error C2440: '=': 'const char [15]' kann nicht in 'LPCWSTR' konvertiert werden 1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat. 1>..\Listing_10_1.cpp(70): error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [15]' in 'LPCWSTR' nicht möglich 1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
Ich hoffe jemand kann mir schnell helfen :oo
mfg Pudding
-
Dein Problem nennt sich UNICODE-Modus. Du kannst entweder die Projekteinstellungen ändern auf ANSI oder MULTIBYTE oder du ersetzt die char-Verwendungen durch TCHAR (und kennzeichnest String-Literale durch
TEXT(...)
).
-
Ich habe ja aber nix umgestellt o.o Im Buch wird auf sowas auch nicht hingewiesen dort steht ganz einfach ich soll es so wie es ist kompilieren :oo bzw könntest du mir sagen wie ich das umstelle, damit es funktioniert?
-
Ok, ich habe mal ein bischen rumgesucht und das unicode zeugs gefunden :oo jetzt funktioniert das auch :oo hoffentlich macht es jetzt nicht bei anderen sachen macken
-
Pudding schrieb:
Ich habe ja aber nix umgestellt o.o Im Buch wird auf sowas auch nicht hingewiesen dort steht ganz einfach ich soll es so wie es ist kompilieren :oo bzw könntest du mir sagen wie ich das umstelle, damit es funktioniert?
Dann ist das Buch vermutlich ein wenig älter. Früher wurde bei neuen Projekten per Default der ANSI-Modus verwendet, modernere VS-Versionen verwenden als Default den UNICODE-Modus (ich weiß nicht genau seit wann).