Problem mit Dev-C++ / Achtung blutiger Anfänger ;-)



  • 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 an

    Danke 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.cpp

    Konsole sollte erscheinen mit

    Hallo!

    Im entsprechenden Verzeichnis befinden sich nun folgende Dateien:
    wait_test.cpp mit 1 KB
    wait_test.exe mit 415 KB

    Diese 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();
    }
    

Anmelden zum Antworten