Mein erstes Programm, was ist falsch ??



  • @audacia: so a schmäh!! lass doch den zeiger weg -.-



  • Du mußt die funktionen schon vorher bekannt machen wenn du sie in main aufrufen willst. außerdem rufst du teil(); auf obwohl du festgelegt hast, daß die funktion ein argument bekommen soll.



  • Danke erstmal für die superschnellen Antworten...

    Habe den unteren Code kopiert, tritt aber beim Compilieren folgende Meldungen auf...,
    was heisst das ??

    Kompilierung läuft...
    Gerade oder ungerade.cpp
    C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Gerade oder ungerade.cpp(11) : warning C4700: Lokale Variable 'a' wurde ohne Initialisierung verwendet
    Linker-Vorgang läuft...
    Gerade oder ungerade.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __cdecl teil(void)" (?teil@@YAXXZ)
    Debug/Gerade oder ungerade.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Gerade oder ungerade.exe - 2 Fehler, 1 Warnung(en)

    *Sorry wenn ich nerv* 😃



  • audacia schrieb:

    [cpp]
    #include <iostream>
    using namespace std;

    int main()
    {
    int* a;
    int b = 2;
    void nteil(), teil();
    cout << "Bitte geben Sie eine Zahl ein: ";
    cin >> *****a; // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt

    if (*****a % b == 1)
    {
    nteil();
    }
    else
    {
    teil();
    }
    return 0;
    }

    void nteil()
    {
    cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
    }

    void teil(int* zeiga)
    {
    cout << "\nDas Ergebnis der Division lautet: " << *****zeiga / 2 << "\n";
    }
    [/cpp]

    ?????
    was ist denn

    void nteil(), teil();
    

    ausserdem hast du vergessen a = new int zu machen...



  • ...
    void nteil();
    ...
    teil();
    ...void teil(int* zeiga)
    ...
    

    das geht schief, wenn du deiner funktion einen integer übergeben möchtest dann deklariere es auch so und rufe es so auf:

    ...
    void nteil(int);
    ...
    teil(deine_zahl);
    ...void teil(int zeiga)
    ...
    


  • Boah, borg kann schon Anfängeraufgaben lösen 🙄 🙄



  • Michael E. schrieb:

    Boah, borg kann schon Anfängeraufgaben lösen 🙄 🙄

    ihr werdet alle staunen wenn meine wpc lösung die schnellste ist ⚠ 😃 🤡



  • Sorry, immer noch nicht 🙂

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int* a;
        a = new int;
    	int b = 2;
        void nteil(), teil();
        cout << "Bitte geben Sie eine Zahl ein: ";
        cin >> *a;  // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt
    
        if (*a % b == 1)
        {
            nteil();   
        }
        else
        {
            teil();
        }
        return 0;
    }
    
    void nteil()
    {
        cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
    }
    
    void teil(int* zeiga)
    {
        cout << "\nDas Ergebnis der Division lautet: " << *zeiga / 2 << "\n";
    }
    

    lässt sich noch nicht ausführen..



  • da sind ja auch 2 dicke fehler drin, nimm meins.
    oder mach das "void nteil(), teil();" raus und informier dich über pointer.



  • borg schrieb:

    Michael E. schrieb:

    Boah, borg kann schon Anfängeraufgaben lösen 🙄 🙄

    ihr werdet alle staunen wenn meine wpc lösung die schnellste ist ⚠ 😃 🤡

    Es geht einfach drum, dass nicht gefragt ist, wie dus machen würdest. Du hast außerdem nur ein klein bisschen was geändert, sodass man noch nicht mal was von ner anderen Vorgehensweise lernen kann.



  • borg schrieb:

    da sind ja auch 2 dicke fehler drin, nimm meins.

    Tus nicht. Da ist der Lerneffekt = 0.



  • high_med schrieb:

    ...lässt sich noch nicht ausführen..

    ja natürlich nicht, siehe meinen letzten beitrag



  • Michael E. schrieb:

    borg schrieb:

    Michael E. schrieb:

    Boah, borg kann schon Anfängeraufgaben lösen 🙄 🙄

    ihr werdet alle staunen wenn meine wpc lösung die schnellste ist ⚠ 😃 🤡

    Es geht einfach drum, dass nicht gefragt ist, wie dus machen würdest. Du hast außerdem nur ein klein bisschen was geändert, sodass man noch nicht mal was von ner anderen Vorgehensweise lernen kann.

    Lol, MichaelE. entscheidet was gefragt ist und was nicht 🤡



  • No comment.



  • Ich nerve mich ja schon selber, Ihr entschuldigt...

    Die Fehler:
    Gerade oder ungerade.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __cdecl teil(void)" (?teil@@YAXXZ)
    Debug/Gerade oder ungerade.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Gerade oder ungerade.exe - 2 Fehler, 0 Warnung(en)

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int* a;
        a = new int;
    	int b = 2;
        void nteil(), teil();
        cout << "Bitte geben Sie eine Zahl ein: ";
        cin >> *a;  // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt
    
        if (*a % b == 1)
        {
            void nteil();   
        }
        else
        {
            teil();
        }
        return 0;
    }
    
    void nteil()
    {
        cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
    }
    
    void teil(int zeiga)
    {
        cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n";
    }
    

    Ach Menno.... 😞



  • Du kannst eine Funktion nicht in einer anderen deklarieren, das musst du vor main() machen.

    Ich nerve mich ja schon selber, Ihr entschuldigt...

    Frag soviel du willst und noch mehr. Sonst lernt man ja nie 🙂



  • Also gut habe jetzt das void nteil(), teil();
    vor int main()

    geschoben, aber die Fehler bleiben noch immer...

    #include <iostream>
    using namespace std;
    
    void nteil(), teil();
    int main()
    {
        int* a;
        a = new int;
    	int b = 2;
        cout << "Bitte geben Sie eine Zahl ein: ";
        cin >> *a;  // der Ausdruck *a dereferenziert a, d. h., greift darauf zu, worauf a zeigt
    
        if (*a % b == 1)
        {
            nteil();   
        }
        else
        {
            teil();
        }
        return 0;
    }
    
    void nteil()
    {
        cout << "\nDie von Ihnen eingegebene Zahl ist nicht durch 2 teilbar!\n";
    }
    
    void teil(int zeiga)
    {
        cout << "\nDas Ergebnis der Division lautet: " << zeiga / 2 << "\n";
    }
    

    und ist das hier nicht irgendwie doppelt gemoppelt ??

    int* a;
        a = new int;
    

    kommt mir vor wie eine doppeldeklaration oder sowas...
    oder irre ich mich ? (hier auch schon wieder ?):)



  • Michael E. schrieb:

    Es geht einfach drum, dass nicht gefragt ist, wie dus machen würdest. Du hast außerdem nur ein klein bisschen was geändert, sodass man noch nicht mal was von ner anderen Vorgehensweise lernen kann.

    jetzt tust du mir aber unrecht, ich hab in meinem ersten posting an seinen code kommentare dabei geschrieben was er falsch gemacht hat.



  • ahhhhhhhhhh, wie oft den noch?

    die deklaration für diese funktion:

    void teil(int zeiga)
    

    muß auch dem entsprechend aussehen:

    void teil(int);
    

    frag soviel du willst, aber nicht immer das gleiche



  • Du musst teil(int zeiga) auch noch was übergeben.
    und dann kannst du nicht 2 Funktionen in einem Rutsch deklarieren.
    Also nicht

    void nteil(), teil(int zeiga);
    

    sondern

    void nteil();
    void teil(int zeiga);
    

    und a = new int ist nicht doppelt gemoppelt, da du ja erst noch Speicher reservieren musst für das worauf a zeigt. Ohne ist nicht definiert wohin a zeigt.


Anmelden zum Antworten