Funktion GetStdHandle
-
Hallo,
ich habe ein Problem beim compilieren des folgenden Codes unter Visual C++:
#include <stdafx.h> #include <windows.h> #include <stdio.h> #include <tchar.h> #include <iostream> using namespace std; Console::Console(void) : Handle(NULL), FullScreenActivated(false) { } bool Console::Init() { Handle = GetStdHandle(STD_OUTPUT_HANDLE); return (Handle && Handle != INVALID_HANDLE_VALUE); } bool Console::Write(SHORT X, SHORT Y, const TCHAR* String, WORD Color) { DWORD Read = 0; WORD CurrentBuffer = 0; TCHAR TextBuffer[4000]; WORD ColorBuffer[4000]; COORD Position = {0, 0}; if (!String) return false; if (!ReadConsoleOutputCharacter(Handle, TextBuffer, 4000, Position, &Read)) return false; if (!ReadConsoleOutputAttribute(Handle, ColorBuffer, 4000, Position, &Read)) return false; Position.X = X; Position.Y = Y; CurrentBuffer = Position.X + (Position.Y * 80); for (size_t i = 0; i < _tcslen(String); i++) { if (String[i] == TEXT('\n')) { CurrentBuffer += (80 - Position.X) + X; Position.X = X; Position.Y++; } else { if (Position.X > 79) { Position.X = X; Position.Y++; } if (String[i] != TextBuffer[CurrentBuffer]) { if (!FillConsoleOutputCharacter(Handle, String[i], 1, Position, &Read)) return false; } if (Color != ColorBuffer[CurrentBuffer]) { if (!FillConsoleOutputAttribute(Handle, Color, 1, Position, &Read)) return false; } Position.X++; CurrentBuffer++; } } return true; }es kommen folgende Fehlermeldungen:
1>.\konsole.cpp(11) : error C2653: 'Console': Keine Klasse oder Namespace
1>.\konsole.cpp(11) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>.\konsole.cpp(12) : error C2550: 'Console': Initialisierungslisten für Konstruktoren dürfen nur in Konstruktordefinition stehen
1>.\konsole.cpp(13) : warning C4508: 'Console': Funktion sollte einen Wert zurückgeben; Ergebnistyp 'void' angenommen
1>.\konsole.cpp(15) : error C2653: 'Console': Keine Klasse oder Namespace
1>.\konsole.cpp(17) : error C2065: 'Handle': nichtdeklarierter Bezeichner
1>.\konsole.cpp(19) : error C2065: 'Handle': nichtdeklarierter Bezeichner
1>.\konsole.cpp(19) : error C2065: 'Handle': nichtdeklarierter Bezeichner
1>.\konsole.cpp(23) : error C2653: 'Console': Keine Klasse oder Namespace
1>.\konsole.cpp(35) : error C2065: 'Handle': nichtdeklarierter Bezeichner
1>.\konsole.cpp(39) : error C2065: 'Handle': nichtdeklarierter Bezeichner
1>.\konsole.cpp(72) : error C2065: 'Handle': nichtdeklarierter Bezeichner
1>.\konsole.cpp(79) : error C2065: 'Handle': nichtdeklarierter BezeichnerVielleicht kann mir da jemand weiterhelfen

-
Das wird damit zusammenhängen, dass du den Header deiner Klasse nicht eingebunden hast und der Compiler dementsprechend nicht weiß, dass es sie gibt und wie sie aussieht.
-
achso, und welchen Header soll ich einbinden?
-
Thorsten777 schrieb:
achso, und welchen Header soll ich einbinden?
Das musst du doch wissen, schließlich musst du ihn selbst geschrieben haben. Den wo drin steht, was Console ist.
-
das ist das Problem, ich habe es nicht selbst geschrieben.
Ich möchte einfach nur Text positioniert auf die Konsole ausgeben können.
den Code hab ich von hier: unter "Write"
http://www.spieleprogrammierer.de/index.php?page=Thread&threadID=8518&pageNo=1&s=b140c70506349708879e687e1285325a49a28761
-
Gleich das allererste Codebeispiel ist der erforderliche Header. Wenn du aber nur Quelltexte zusammensuchst ohne sie zu verstehen wird das Ergebnis nicht funktionieren, das garantiere ich dir.
-
gut, also wenn das der Header ist, füge ich ihn bei Headerdateien hinzu
aber unter welchem Namen, Console.h ?
das habe ich getan, trotzdem kann er nicht gefunden werden.
das muß doch noch in der cpp angegeben werden, oder?
mit #include <Console.h> ?
-
Ja.
Aber so wird das nichts. Wenn du nicht programmieren kannst, dann musst du es lernen. Du wirst sonst für jede weitere Zeile und jede Kleinigkeit nachfragen müssen. Man kann nicht durch Zusammensuchen von Code aus dem Netz das Programmieren lernen.