[Noobie] Fehlermeldung bei Funktion



  • Ich arbeite mich gerade durch "C++ in 21 Tagen" durch und bin bei Tag 5.

    1: // Listing 5.1 - Zeigt die Verwendung von Funktionsprototypen
    2: #include <iostream.h>
    3: #include <conio.h.h>
    4: int Area(int length, int width); // Funktionsprototyp
    5:
    6: int main()
    7: {
    8: int lengthOfYard;
    9: int widthOfYard;
    10: int areaOfYard;
    11:
    12: cout << "\nWie breit ist Ihr Garten? ";
    13: cin >> widthOfYard;
    14: cout << "\nWie lang ist Ihr Garten? ";
    15: cin >> lengthOfYard;
    16:
    17: areaOfYard= Area(lengthOfYard,widthOfYard);
    18:
    19: cout << "\nDie Flaeche Ihres Gartens betraegt ";
    20: cout << areaOfYard;
    21: cout << " Quadratmeter\n\n";
    22: getch();
    23: }
    24:
    25: int Area(int l, int w)
    26: {
    27: return yardLength * yardWidth;
    28: }

    Bei diesem Code bekomme ich Compiler-Fehler:
    [C++ Fehler] hello.cpp(16): E2268 Aufruf der undefinierten Funktion 'Area'
    [C++ Fehler] hello.cpp(26): E2451 Undefiniertes Symbol 'yardwidth'
    [C++ Fehler] hello.cpp(26): E2451 Undefiniertes Symbol 'yardlength'

    Ändere ich nun Zeile 25 in
    int Area(int lengthOfYard * widthOfYard)
    und Zeile 27 in
    return lengthOfYard * widthOfYard;
    um, erhalte ich nur noch
    [C++ Fehler] hello.cpp(16): E2268 Aufruf der undefinierten Funktion 'Area'.
    Verschiebe ich Zeile 25 - 28 direkt unter die #include-Anweisungen funktioniert alles, wie es soll.

    Das hab ich durch Probieren herausgefunden. Laut dem Buch müsste es aber so wie im ersten Beispiel funktionieren. Allerdings ist der Code in dem Buch mit dem Visual C++-Compiler, den ich im Moment runterlade, getestet. Ich arbeite mit dem Borland C++ Builder 5 und muss auch

    #include <conio.h>
    ..
    getch();

    in den Code einbinden, damit sich das Fenster nicht direkt wieder schließt.

    Bin allerdings absoluter Neuling, was C++ anbelangt, deswegen versucht es mir nicht unnötig schwer zu machen.

    Danke



  • Hallo

    #include <iostream> // Für die Header des C++ Standards kein .h!
    #include <conio.h> // Kein .h.h
    int Area(int length, int width); // Funktionsprototyp
    
    using namespace std; // Namespace für Symbole aus C++ Standard (cout, cin)
    
    int main()
    {
      int lengthOfYard;
      int widthOfYard;
      int areaOfYard;
    
      cout << "\nWie breit ist Ihr Garten? ";
      cin >> widthOfYard;
      cout << "\nWie lang ist Ihr Garten? ";
      cin >> lengthOfYard;
    
      areaOfYard= Area(lengthOfYard,widthOfYard);
    
      cout << "\nDie Flaeche Ihres Gartens betraegt ";
      cout << areaOfYard;
      cout << " Quadratmeter\n\n";
      getch();
    }
    
    int Area(int l, int w)
    {
     return l * w; // Namen der Variablen so wie die Parameter der Funktion heißen!
    }
    

    Du solltest unbedingt vor dem veralteten Buch ein Tutorial durcharbeiten das sich an den aktuellen C++ Standard hält. Da du keine Builder-spezifischen Sachen (außer conio) benutzt verschieb ich dich ins C++ Forum.

    Außerdem hier fürs Posten im Forum wichtig : sfds

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die Fehlermeldungen sind doch eigentlich relativ eindeutig.

    Du hast im Kopf deiner cpp die Funktion

    int Area(int length, int width);
    

    definiert. Weiter unten formulierst du allerdings die Funktion

    int Area(int l, int w)
    

    aus.
    Der Compiler trifft eine Verknüpfung von Funktiondeklaration und Definition nicht nur aufgrund des Funktionsnamens sondern auch aufgrund der Aufrufvariablen.
    D.h. dass die Variablen sowohl "oben" als auch "unten" die selben Namen haben müssen.
    Die anderen beiden Fehlermeldungen sollten eigentlich auch relativ verständlich sein.
    Du versuchst mit Variablen zu rechnen die es nicht gibt.
    Es muss also wie folgt aussehen:

    int Area(int length, int width); // Funktionsprototyp
    //...
    int Area(int length, int width)
    {
     return length * width;
    }
    


  • Ahh.. Danke ^^

    Du hast mir gleich noch eine Frage mitbeantwortet die ich grade stellen wollte.

    Bis zum nächsten Problem



  • Hallo

    rean schrieb:

    ...
    Der Compiler trifft eine Verknüpfung von Funktiondeklaration und Definition nicht nur aufgrund des Funktionsnamens sondern auch aufgrund der Aufrufvariablen.

    Nein, nicht Variablennamen sondern Variablentyp. Der von mir gepostete Quellcode wird von meinen BCB 5 jedenfalls ordentlich kompiliert.

    bis bald
    akari



  • noch ne kurze frage ..

    welchen compiler würdet ihr bevorzugen?

    visual c++ 2005 oder BCB5?



  • VC++ 2005 ...

    #include <iostream>
    
    unsigned int calc_area(const unsigned int&, const unsigned int&); // unsigned int, da es keine negative Fläche gibt ;)
    
    int main()
    {
        std::cout << "Wie breit ist Ihr Garten? (m)";
        unsigned int widthOfYard = 0; // Default-Wert setzen da sonnst bei falscher Eingabe Endlosschleife! Variable erst erstellen wenn gebraucht!
        std::cin >> widthOfYard;
        std::cout << "Wie lang ist Ihr Garten? (m)";
        unsigned int lengthOfYard = 0; // Das selbe wie bei "widthOfYard".
        std::cin >> lengthOfYard;
        std::cout << "Die Flaeche Ihres Gartens betraegt " << calc_area(lengthOfYard, widthOfYard) << " Quadratmeter" << std::endl;
    }
    
    unsigned int calc_area(const unsigned int& length, const unsigned int& width)
    {
        return (length * width);
    }
    

    ... so wäre es noch etwas besser ...


Anmelden zum Antworten