Problem mit Dev-C++ / Achtung blutiger Anfänger ;-)
-
Hallo Zusammen.
Wir lernen jetzt in der Berufschule C++.
Hab mein erstes Programm mit mehreren Varibalen auch schon geschreiben.
Da ion der Shcule alles so wunderbar funktioniert hat, wollte ich es zuhause nachmachen.
Da in der Schule der Borland C++ Compiler installiert war, versuchte ich es auch zuhause damit.Doch da bei der borland version (8.6MB) keine bcc32.exe dabei war, wählte ich alternativ den Dev-C++ Compiler.
Ich Beginne ein neues Projekt/normale Windows Application/C++.
Was ich aber auch mache, er führt das Programm nicht aus ( nichtmal die Beispielsdateien).
Selbst bei einfachen Hello World Programmen tut sich nichts.
Kompilieren verläuft ohne Fehler, aber wenn ich auch execute klicke tut sich gar nichts .Ich hoffe einer von euch kann mir helfen.
Danke
-
hast du eine konsolenapplikation erstellt?
http://www.cpp-programming.de/tutorials/lektion_01.html
so long
-
Der Dev-C++-Download umfasst ca. 12 MB. Hast du diesen installiert? Version 4.9.8.x (x=10 ist aktuell). Normalerweise kannst Du direkt ohne(!) Projekt eine xxx.cpp erzeugen und compilieren/linken. Versuche es mal damit:
#include <iostream> #include <string> #include <conio.h> using namespace std; int main( ) { string s; s = "Das ist ein String."; cout << s << endl; getch(); }
Bei der WinAPI-Programmierung muss ein Projekt erstellt werden. Da findet man eine Datei Projekt1.dev und als Source main.cpp. Dev-C++ gibt ein WinAPI-Grundgerüst automatisch vor, so dass dies auf jeden Fall gehen sollte.
Ansonsten:
#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); //Deklaration der Windows-Nachrichten-Prozedur int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) { char szName[] = "Fensterklasse"; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; // CS = "class style" wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hI; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) GetStockObject (HOLLOW_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szName; RegisterClass (&wc); HWND hwnd = CreateWindow (szName, "", WS_SYSMENU | WS_THICKFRAME, 200, 200, 400, 400, NULL, NULL, hI, NULL); ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); // Nachrichten-Schleife MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } // Windows-Nachrichten-Prozedur LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; int retVal; switch (message) { case WM_PAINT: hdc = BeginPaint (hwnd, &ps); TextOut (hdc, 20, 20, "Ich bin ein Fenster.", 20); EndPaint (hwnd, &ps); return 0; case WM_CLOSE: retVal = MessageBox(hwnd, "Wirklich beenden?", "", 0); if(retVal==1) SendMessage(hwnd, WM_DESTROY, 0, 0); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); }
Wenn der Linker nicht funktioniert, werden die xxx.cpp-dateien nur zu Objekt-Dateien xxx.o übersetzt.
Wie sieht das bei dir konkret aus?
-
Mein Dev-4 Download hatte 8 MB , habe ihn aber von dem link auf dieser seite ( c-plusplus.net ) ... hmm
-
Marc++us hat da auf eine veraltete Version gelinkt.
Probier den Download hier:
http://prdownloads.sourceforge.net/dev-cpp/devcpp4980.exe(von der Seite, auf die auch Marc++us besser linken sollte: http://www.bloodshed.net/dev/ - ich schreib ihm das mal schnell gleich :))
-
Danke für eure Antworten.
Habe jetzt wieder Zeit, mich darum zu kümmern :Wie ich mittlerweile herausgefunden habe , lernen wir in der Schule etwas völlig veraltetes ( wir machten alles mit VOID main() / oder ohne "using namespace std"; / <iostream> mit .h usw. )
Habe die neuste Version des Dev-C++ Compilers und in der Mittgspause n kleines Mini Progrämmchen geschrieben.
Es zeigt keine Fehler an.
Lässt sich aber komischerweise nicht starten : ( Identisches Problem mit dem ICC-Win32 Compiler)#include <iostream> #include <stdio.h> using namespace std; int main() { float lang; float breit; float produkt; cout<<"Programm zur Berechnung von Flächeninhalten!"<<endl; cout<<"Bitte geben sie die beiden Seitenlängen nacheinander in Meter ein"<<endl; cin>>lang; cin>>breit; produkt = (breit*lang); cout<<"Das Recheck hat einen Flächeninhalt von"<<produkt<<"Metern"<<endl; return 0; };
Kompilieren geht also ohne Fehler, aber ausführen nicht ( beim klicken auf RUN geschieht nichts , auch die erstellte *.exe kann nicht ausgeführt werden )
Danke für eure Hilfen
-
Installiere am besten alles komplett neu und teste o.g. Dateien.
-
bei dev-cpp
müssen einige grundlegende sachen beachtet werden
so zB muss man bei einigen .c anstatt .h schreiben oder das ganz und gar weglassen
wichtig ist auch das using namespace im deklarationsteil vorkommt!!!
/---------------------------------------------------------------------------/
/---Bibliothekenblock---Anfang---/
#include <iostream> //
#include <conio.c> //
#include <stdlib.h> //
#include <math.h> //
#include <iomanip> //
#include <stdio.h> //
#include <windows.h> //
#include <dos.h> //
#include <fstream> //
#include <time.h> //
#include <string>
/---Bibliothekenblock---Ende-----/using namespace std;
/---------------------------------------------------------------------------/bei deinem programm... das sich nicht ausführen läßt...
schreib vor return 0;mal ein getch();
dieser befehl wartet auf eine belliebige eingabe und geht dann weiter
dein programm rattert von oben bis unten durch und ist bei reurn 0 am ende und schließt dann
mit getch(); wartet er an dieser stelle und schließt dann
-
Danke für eure Antworten.
"cin" wartet doch auch auf eine Eingabe , also dürfte getch auch nichts bringen oder ?
an Erhard.
Ich habe es schon auf 3 Rechnern gezogen und auch wieder neuinstalliert.Keine Ahnung, worans liegen könnte in der Schule klappt alles wie am Schnürchen, aber ich will auch zuhause weiterüben ...
-
"cin" wartet doch auch auf eine Eingabe , also dürfte getch auch nichts bringen oder ?
cin ist Käse, getch() nicht C++-Standard. So gehts richtig:
#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() { //... wait(); }
-
Hast du die von mir oben geposteten Sourcecodes schon getestet?
-
Den Code kann ich auch nicht ausführen , compilieren ja
-
Den Code kann ich auch nicht ausführen , compilieren ja
Was ist denn das Ergebnis des Kompilierens und Linkens? Hast du zum Schluss eine Binary, z.B. exe bei MS Windows?
-
Ja genau das ist der Fall.
Exe ist da , alles so wie es soll ; Nur ausführen lässt sich nichts.Dev C++ 4.9.9.0.
-Neues Projekt
-Windows Application C++
-und fange dann an z.b. das was ich im vorigen Teil schon gepostet hatte.
-compile and run. -> compile ja run nein / ts zeigt aber auch keine Fehler anDanke für deine Mühe Erhard
-
Dev-C++ 4.9.9.0 (Betriebssystem: MS Windows 2000):
Mach mal überhaupt kein Projekt auf, sondern gib einfach Strg+N (Datei-Neu-Quelldatei) ein. Folgender Source:
#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() { std::cout << "Hallo!" << std::endl; wait(); }
Dann bitte Funktionstaste F9 (Kompilieren + Ausführen) drücken.
Speichern unter wait_test.cppKonsole sollte erscheinen mit
Hallo!
Im entsprechenden Verzeichnis befinden sich nun folgende Dateien:
wait_test.cpp mit 1 KB
wait_test.exe mit 415 KBDiese exe ist ausführbar.
Wo genau hakt es bei genau diesem Beispiel?
-
Danke , das hat funktioniert . Komisch.
Waran kanns gelegen haben ?
-
Vermutlich daran, dass du (obwohls dir oben glaub ich mal gesagt wurde) immer noch bei Projekt auf
Windows Application (!)
gedrückt hast ... Denn schließlich willst du eine Konsolenanwendung bauen, die die Funktion int main() benutzt, während eine WindowsApplication aber eine WinMain-Funktion haben will. Und das mit dem wait() ist auch sehr wichtig, das Problem hatte ich am Anfang auch mit Dev-Cpp
Als Anfänger weiß man ja noch nicht, dass das Programm immer sofort beendet wird ^^
Aber ich denke, das Erhards Tipp mit dem Strg+N hier mehr geholfen hat, denn mit cin "stoppt" das Programm ja auch.Also beim nächsten Mal eine Konsolenanwendung (siehe Bild auf der Seite hiervor) bauen, NICHT Windows Application.
greetz
-
Danke, das hat funktioniert.
O.k., Konsolen sind abgehakt.
Jetzt kannst du als nächstes die Windows-Applikation mit dem o.g. Windows-Programm testen. Dafür muss man ein Projekt "Windows Application" anlegen.
Programme findest du auch hier: http://www.henkessoft.de/api1.htm
z.B.:#include <windows.h> int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { MessageBox( NULL, "Inhalt", "Überschrift", MB_OK ); return 0; }
Da du aber offensichtlich noch am Anfang stehst, solltest du dich bei C++ zunächst längere zeit auf die Konsole beschränken.
Ausgewählte Tutorials:
http://www.cpp-tutor.de/cpp/toc.htm
http://tutorial.schornboeck.net/inhalt.htm
http://www.volkard.de/C++/Tutorial/Grundlagen/
http://de.geocities.com/throni3/cpp/Inhalt.html
http://www.henkessoft.de/cpp_konsole.htm
-
Hallo
Sorry , hatte nicht viel Zeit .Windows Appl. mache ich dann später wenn die console ein wenig besser sitzt *g*
Bin echt erstaunt, wie gut einem hier geholfen wird .
Ich habe ein wenig weiter gemacht .
Der Code lässt sich zwar ausführen , und ich kann die Zahlen eingeben , aber danach bricht er einfach ab , und die Console schliesst sich .Mit borland habe ich keinerlei Problem , aber den habe ich nicht hier
#include <iostream> #include <stdlib.h> using namespace std; float Berechnung (float Zahl1 , float Zahl2 , float Zahl3) { return (Zahl1*Zahl2*Zahl3); } int main () { const float limit = 40; float Zahl1 , Zahl2 , Zahl3 , Ergebnis; cout<<"Programm zur Berechnung von Volumenberechnung"<<endl; cout<<"Bitte geben Sie die erste Seitenlänge ein"<<endl; cin>>Zahl1; cout<<"Bitte geben Sie die zweite Seitenlänge ein"<<endl; cin>>Zahl2; cout<<"Bitte geben Sie die dritte Seitenlänge ein"<<endl; cin>>Zahl3; Ergebnis= Berechnung ( Zahl1 , Zahl2 , Zahl3); if (Ergebnis>limit) cout<<"Das Volumen ist zu gross" ; else cout<<"Das Volumen ist kleiner als das Limit"; cout<<"Das Volumen beträgt"<<Ergebnis<<"m³"<<endl; return (0) ; }
-
schreib vor das return (0)
ein:getch(); // wartet auf tasten druck des anwenders und geht dann weiter
oder
_sleep(1000); // (millisekunden)
oder
system("pause"); // wartet auf tastendruck des users mit gleichzeitiger textausgabe
/--------------------/
bei
return (0); // kannst du die klammern weglassen
-
getch() von conio.h (nicht C++-Standard) oder:
#include <iostream> void wait() { std::cin.clear(); std::cin.ignore( std::cin.rdbuf()->in_avail() ); std::cin.get(); } int main() { //... wait(); }