blutiger Anfänger: conio.h geht nicht mehr
-
hallo forum
ich habe vor einer woche mit Bloodshed Dev-Cpp angefangen Cpp zu lernen.
Bis jetzt habe ich immer gemäss meinem tutorial mit #include <conio.h> gearbeitet und hatte keine probleme damit.
Von einem Tag auf den anderen bekomme ich aber beim compilieren folgende meldung:
`getch' was not declared in this scopeVormals compilierte programme funktionieren aber noch mit "getch"
Nur neue sachen halt nicht.In der Dev-Cpp-Hilfe steht folgendes:
Include conio.h to your source, and add the following file to your project : C:\Dev-C++\include\conio.c (where C:\Dev-C++ is where you installed Dev-C++).Somit habe ich aus MinGW die Datei "conio" kopiert und in einen unter Dev-Cpp neu angelegten ordner "include" gepasted. (so habe ich die Hilfe interpretiert)
--> es will aber immer noch nicht
Die FAQ's für anfänger haben mich hierbei auch nicht weitergebracht.
Kann mir da jemand behilflich sein?
Wäre Euch sehr dankbar
-
Irgendwas musst du doch gemacht haben. Hast du evtl. angefangen namespaces zu verwenden und "includest" den Header ungewollt in einen namespace?
-
So zum einen solltest du dir überlegen den Compiler/IDE zu wechseln.Weil Dev C++ schon seit 10 jahren nicht mehr weiterentwickelt wurde. Nimm sowas wie Code::Blocks oder Visual Studio Express(oder Professionell wenn du eine Lizens hast)
Zum anderen ist es bei manchem Compilern so, das es nichtgetch()
heißt sonder irgendwie
_getch()
.Was aber eh irrelevant ist, da du bei Code::Blocks oder Visual Studio die conio.h gelassen includieren kannst und dort mit getch() arbeiten solltest.(zumindest ging es bei mir so)
-
Es gibt C++-Alternativen zu getch(), die man im Sinne der Plattform-Unabhängigkeit nutzt:
#include <iostream> void wait() { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.get(); } int main() { //... Programm Code wait(); }
Das funktioniert gut, solange man kein windows.h includiert. Dann muss man einen work-around verwenden wegen max, der wie folgt lautet:
#include <iostream> void wait() { std::cin.clear(); // std::cin.ignore( std::cin.rdbuf()->in_avail() ); std::streambuf * pbuf = std::cin.rdbuf(); std::streamsize size = pbuf->in_avail(); std::cin.ignore(size); std::cin.get(); } int main() { //... Programm Code wait(); }
Damit kann man getch() ablösen.
-
Decimad schrieb:
Irgendwas musst du doch gemacht haben. Hast du evtl. angefangen namespaces zu verwenden und "includest" den Header ungewollt in einen namespace?
namespace? nein, eigentlich nicht.
ich habe mit iomanip-somderzeichen angefangen.Firefighter schrieb:
So zum einen solltest du dir überlegen den Compiler/IDE zu wechseln.Weil Dev C++ schon seit 10 jahren nicht mehr weiterentwickelt wurde. Nimm sowas wie Code::Blocks oder Visual Studio Express
wäre auch ein versuch wert. habe jetzt mit Dev Cpp gearbeitet, weil das mein tutorial empfiehlt (2007). und als rookie halte ich mich vorerst an die empfehlungen. aber ich versuchs mit Code::Blocks. Das hab ich auch.
Erhard Henkes schrieb:
Es gibt C++-Alternativen zu getch(), die man im Sinne der Plattform-Unabhängigkeit nutzt:
ja, cin.get habe ich auch schon mitgekriegt.
aber eben.. das tutorial sagt...
und wenn ich dann anfange überall ein bisschen davon abzuweichen hab ich nacher ein riesen chaos. ich versuchs also mal mit nem anderen compiler. hab mich auch schon irgendwie ans getch gewöhntWenns nicht klappt, versuch ichs weiter und melde mich ggf nochmals.
Vielen herzlichen Dank euch allen!
-
hab mich auch schon irgendwie ans getch gewöhnt
Ist ja auch nicht schlecht gewesen, früher! Du ersetzt einfach des getch() durch wait(). Oben fügst Du jeweils die Funktion für wait() ein, und schon klappt alles wie von selbst. Das ist keine wesentliche Änderung für Dich.
Als Compiler empfehle ich Code::Blocks für den Anfang, später VC C++ Express.
-
Erhard Henkes schrieb:
Das funktioniert gut, solange man kein windows.h includiert. Dann muss man einen work-around verwenden wegen max, der wie folgt lautet:
Soweit ich weiss, gab es noch zwei andere Workarounds. Der eine mit Klammern um den Ausdruck, der andere mit einem Makro, das auf nichts definiert ist und vor
max()
eingefügt wird.
-
Nexus schrieb:
Erhard Henkes schrieb:
Das funktioniert gut, solange man kein windows.h includiert. Dann muss man einen work-around verwenden wegen max, der wie folgt lautet:
Soweit ich weiss, gab es noch zwei andere Workarounds. Der eine mit Klammern um den Ausdruck, der andere mit einem Makro, das auf nichts definiert ist und vor
max()
eingefügt wird.Es gäbe sonst auch noch NOMINMAX.
Finde das ganze aber auch übelst eklig. Wenn ich es brauche nehme ich die Variante mit den Klammer,auch wenn es mir eigentlich wiederstrebt meinen Code an eine "schlechte" Lib anzupassen..
-
Solange das keine Nachteile auf anderen Code haben könnte, hätte ich auch keine Gewissensbisse, ein
#undef
zu verwenden. WobeiNOMINMAX
die sanftere Methode darstellt.