schweres Problem...



  • Ich habe immer Probleme mit dev-cpp, auch in borland funktioniert dieser code nicht. Was ist falsch? Liegt es an den Funktionsaufrufen?

    // kleine Rechenprogramme
    // Version 1.9.0
    // Farbe
    
    // PROGRAMMANFANG
    
    // TEIL 1: INKLUDIERTE DATEIEN
    #include <conio.h>
    #include <iostream.h>
    #include <stdio.h>
    #include <time.h>
    #include <process.h>
    #include <string>
    #include <windows.h>
    #include <stdlib.h>
    
    // TEIL 2a: FESTLEGUNG DER KONSOLENGRAFIK
    void farbe(WORD color) 
    { 
        SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), color); 
    } 
    
    // TEIL 2b: FESTLEGUNG DER KONSOLENFARBEN
    #define SCHWARZ         0x0000
    #define BLAU            0x0001 
    #define GRUEN           0x0002 
    #define ROT             0x0004 
    #define NORMAL          0x0007 
    #define HELLBLAU        0x0009 
    #define GELB            0x000e
    #define BG_BLAU_NORMAL  0x00017 
    #define BG_BLAU_BLAU    0x00011
    #define BG_GRUEN_GRUEN  0x00022
    #define BG_GRUEN_NORMAL 0x00027
    #define BG_ROT_NORMAL   0x00047
    #define BG_ROT_ROT      0x00044
    
    int main()
    {
        farbeZwei();   // Hier kommen die Fehler
        hauptteil();   // implicit declaration ???
        getch();
    }
    
    int farbeZwei()
    {
        cout<<"1 Gruen; 2 Blau; 3 Rot: ";
        char farbauswahl;
        cin>>farbauswahl;
        switch(farbauswahl)
        {
            case '1':
                    system("CLS");
                    farbe(BG_GRUEN_GRUEN);
                    cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
                    system("CLS");
                    farbe(BG_GRUEN_NORMAL);
                    return;
            case '2':
                    system("CLS");
                    farbe(BG_BLAU_BLAU);
                    cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
                    system("CLS");
                    farbe(BG_BLAU_NORMAL);
                    return;                                
            case '3':
                    system("CLS");
                    farbe(BG_ROT_ROT);
                    cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
                    system("CLS");
                    farbe(BG_ROT_NORMAL);
                    return;
            default:
                    system("CLS");
                    farbe(BG_GRUEN_GRUEN);
                    cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
                    system("CLS");
                    farbe(BG_GRUEN_NORMAL);
                    return;
        }    
    }
    
    // TEIL 3: HAUPTTEIL
    int hauptteil()
    {
        // TEIL 3.1: ZEIT HOLEN
        struct tm *ptr;
        time_t lt;
        lt = time(NULL);
        ptr = localtime(&lt);
        // TEIL 3.2: ERSTE BILDSCHIRMGRAFIK: AUSWAHLMENUE UND TITEL
        cout<<"ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
        cout<<"º                                                                              º";
        cout<<"º                      Kleine Programme                                        º";
        cout<<"º                      made by Lars Hupel; Version 1.9.0                       º";
        cout<<"º                                                                              º";
        cout<<"ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ";
        cout<<"                                                                                ";
        cout<<asctime(ptr);
        cout<<"\n";
        cout<<"Auswahlmenue der Rechnungsanweisungen\n\n";
        int auswahl;
        char beenden;
        cout<<"1 - PHYSIK              ° Geschwindigkeit berechnen\n";
        cout<<"2 - MATHEMATIK          ° Zeiten addieren\n";
        cout<<"3 - MATHEMATIK          ° ggT berechnen\n";
        cout<<"4 - MATHEMATIK          ° Wurzel ausrechnen\n";
        cout<<"9 - Programm beenden\n\n";
        fflush(stdin);
        cout<<"Auswahl..............: ";
        cin>>auswahl;
        fflush(stdin);
        system("CLS");
        // TEIL 3.3: NEUE BILDSCHIRMGRAFIK
        cout<<"ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
        cout<<"º                                                                              º";
        cout<<"º                      Kleine Programme                                        º";
        cout<<"º                      made by Lars Hupel; Version 1.9.0                       º";
        cout<<"º                                                                              º";
        cout<<"ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ";
        cout<<"                                                                                ";
        cout<<asctime(ptr);
        cout<<"                                                                                ";
        // TEIL 3.4: PROGRAMMTEILAUSWAHL PER SWITCH(AUSWAHL)
        switch(auswahl)
        {
            case 1:
                    float s,t,v;
                    cout<<"\n\nWeg  = ";
                    cin>>s;
                    cout<<"Zeit = ";
                    cin>>t;
                    v=s/t;
                    cout<<"Die Geschwindigkeit betraegt "<<v<<" km/h!";
                    getch();
                    cout<<"\n\nProgramm beenden (j)? ";
                    cin>>beenden;
                    switch(beenden)
                    {
                            case 'j':
                                    return 0;
                                    break;
                    }
                    system("CLS");
                    return 0;
            case 2:
                    int std1,std2,min1,min2,sec1,sec2,stdg,ming,secg;
                    cout<<"\n\nStunden (1)     = ";
                    cin>>std1;
                    cout<<"Minuten (1)     = ";
                    cin>>min1;
                    cout<<"Sekunden (1)    = ";
                    cin>>sec1;
                    cout<<"Stunden (2)     = ";
                    cin>>std2;
                    cout<<"Minuten (2)     = ";
                    cin>>min2;
                    cout<<"Sekunden (2)    = ";
                    cin>>sec2;
                    stdg = std1 + std2;
                    ming = min1 + min2;
                    secg = sec1 + sec2;
                    ming = ming + (secg/60);
                    secg = secg%60;
                    stdg = stdg + (ming/60);
                    ming = ming%60;
                    cout<<"\n"<<stdg<<" Stunden, "<<ming<<" Minuten und "<<secg<<" Sekunden.";
                    getch();
                    cout<<"\n\nProgramm beenden (j)? ";
                    cin>>beenden;
                    switch(beenden)
                    {
                            case 'j':
                                    return 0;
                                    break;
                    }
                    system("CLS");
                    return 0;
            case 3:
                    int zahla,zahlb;
                    cout<<"\n\nZahl 1 = ";
                    cin>>zahla;
                    cout<<"Zahl 2 = ";
                    cin>>zahlb;
                    while (zahla != zahlb)
                    {
                            if (zahla > zahlb)
                            {
                                    zahla = zahla - zahlb;
                            }
                            else
                            {
                                    zahlb = zahlb - zahla;
                            };
                    }
                    cout<<"Der ggt ist gleich "<<zahla<<".";
                    getch();
                    cout<<"\n\nProgramm beenden (j)? ";
                    cin>>beenden;
                    switch(beenden)
                    {
                            case 'j':
                                    return 0;
                                    break;
                    }
                    system("CLS");
                    return 0;
            case 4:
                    float zahl,seitea,seiteb,genau;
                    cout<<"\n\nZahl = ";
                    cin>>zahl;
                    cout<<"Genauigkeit = ";
                    cin>>genau;
                    seiteb = 1;
                    seitea = zahl;
                    if (genau == 0)
                    {
                            genau = 0.0000000001;
                    }
                    cout<<"\nBerechnung laeuft... ";
                    while ((seitea - seiteb) > genau)
                    {
                            seitea = (seitea + seiteb) / 2;
                            seiteb = zahl / seitea;
                            cout<<seitea<<"...";
                    }
                    cout<<"\n\n"<<"Die Wurzel betraegt "<<seitea<<".";
                    getch();
                    cout<<"\n\nProgramm beenden (j)? ";
                    cin>>beenden;
                    switch(beenden)
                    {
                            case 'j':
                                    return 0;
                                    break;
                    }
                    system("CLS");
                    return 0;
            case 9:
                    return 0;
                    break;
            default:
                    cout<<"\n\nFalsche Eingabe!";
                    getch();
                    return 0;
        }
    }
    

    Danke!



  • Wie waers mit der Fehlermeldung oder -beschreibung?



  • [Warning] in function 'int main()'
    42 implicit declaration of function 'int farbeZwei(...)'
    43 implicit declaration of function 'int hauptteil'
    [Build Error] At top level:
    48 [Warning] 'farbeZwei' was previously implicitly declared to retun 'int'
    ... und noch unzählige andere Fehler
    

    Die Fehler in Zeilen 42/43 sind aber die einzigen Fehler, da ich den Code schon einmal vereinfacht in einer Vorgängerversion benutzt habe und dieser ohne Fehler korrekt kompiliert wurde.
    Der Borland-Compiler aus dem Internet macht übrigens gar nichts (er kann die Header-Dateien nicht finden) 😕 😕 😕

    MfG Lars



  • ok ich kann dir sagen was das Problem ist und was du tun musst: Du benutzt Funktionen, die an der Aufrufstelle noch nicht bekannt sind. Es gibt 2 Moeglichkeiten, das zu loesen: Entweder du verschiebst die Funktionen ueber die main-Funktion. Oder (und auch mal, falls das nicht ausreicht), du *deklarierst* die Funktionen oberhalb der main:

    int farbeZwei();
    int hauptteil();
    
    int main() {
      ...
    }
    

    Was ich dir nicht erklaeren kann ist, warum es ausgerechnet zu diesem Fehler kommt. Eigentlich ist es in C++ nicht erlaubt, undeklarierte Funktionen aufzurufen. Du zitierst aber lediglich eine Warnung ('implicit declaration'). Das riecht nach C. Was mich weiterhin stutzig macht, ist, dass der Compiler findet, dass die Definitionen der Funktionen nicht mit der implizit gemachten Annahme uebereinstimmen. Er nimmt automatisch (nach C-Regeln, wie gesagt) eine Signatur von int farbeZwei() an, beschwert sich jedoch, wenn er diese tatsaechlich vorfindet. 😕 Egal, das ist nur rumraten, die Loesung von oben sollte es tun.



  • daneben, daß es nach c "riecht", solltest du noch die funktion "farbezwei" mit einem void als rückgabewert versehen, oder, schlechterenfalls, die vielen returns mit einem integerwert.



  • danke, das funktioniert prächtig.

    aber wie kann ich noch machen, dass das programm solange weiterläuft, bis ich nach einer berechnung n eingeben habe (das hauptteil() immer wieder von main() aufgerufen wird.

    Hier nochmal der neue Quelltext:

    // kleine Rechenprogramme 
    // Version 2.0.0 ALPHA
    // Farbe 
    
    // PROGRAMMANFANG 
    
    // TEIL 1: INKLUDIERTE DATEIEN 
    ...
    
    // TEIL 2a: FESTLEGUNG DER KONSOLENGRAFIK 
    void farbe(WORD color) 
    { 
        SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), color); 
    } 
    
    // TEIL 2b: FESTLEGUNG DER KONSOLENFARBEN 
    // Farben
    
    int farbeZwei();
    int hauptteil();
    
    int main() 
    { 
        farbeZwei();
        hauptteil(); // Wie kann ich das hier realisieren?
        return 0;
    } 
    
    int farbeZwei() 
    { 
    // Farben     
    } 
    
    // TEIL 3: HAUPTTEIL 
    int hauptteil() 
    { 
        // TEIL 3.1: ZEIT HOLEN 
    // Bildschirmgrafik
        char beenden; 
    // Menue
        cin>>auswahl;
    // Sonstiges
        // TEIL 3.4: PROGRAMMTEILAUSWAHL PER SWITCH(AUSWAHL) 
        switch(auswahl) 
        { 
            case 1: 
    // Berechnung
                    system("CLS"); 
                    return 0; 
            case 2: 
    // Berechnung
                    cout<<"\n\nProgramm beenden (j)? "; 
                    cin>>beenden; 
                    system("CLS"); 
                    return 0; 
            case 3: 
    // Berechnung
                    cout<<"\n\nProgramm beenden (j)? "; 
                    cin>>beenden; 
                    system("CLS"); 
                    return 0; 
            case 4: 
    // Berechnung
                    cout<<"\n\nProgramm beenden (j)? "; 
                    cin>>beenden; 
                    system("CLS"); 
                    return 0; 
            case 9:
                    cout<<"\n\nEnter druecken... ";
                    return 0; 
                    break; 
            default: 
                    cout<<"\n\nFalsche Eingabe!"; 
                    getch(); 
                    return 0; 
        } 
    }
    


  • Na mit einer Schleife...

    int main()
    {
        farbeZwei();
        char abbruch;
        do {
            hauptteil(); // Wie kann ich das hier realisieren?
    
            cout << "Weiter machen? (j/n): ";
            cin >> abbruch;
    
        } while(abbruch != 'n');
        return 0;
    }
    

Anmelden zum Antworten