C++ Compiler Frage

  1. joedelord

    joedelord Thread StarterMacUser Mitglied

    Mitglied seit:
    12.12.2002
    Beiträge:
    481
    Zustimmungen:
    0
    hallo macuser,
    wiedermal brauch ich eure hilfe (wahrscheinlich nicht das letzte mal). diesmal geht es wieder um den compiler;
    um mein problem zu testen habe ich ein kleines testprojekt angelegt und folgendes ausprobiert:

    Code:
    #include <iostream>
    using namespace std;
    
    int funktion()
    {
        return funktion2(5);
    }
    
    int funktion2(int inputZahl)
    {
        return inputZahl * inputZahl;
    }
    
    int main (int argc, const char * argv[])
    {
        int a;
        a = funktion();
        cout << "a = "<< a <<"\n";
        cout << "Hello, World!\n";
        return 0;
    }
    
    die eine funktion ruft eine andere auf, nichts aufregendes, bis auf die tatsache das ich immer eine compiler fehlermeldung bekomme:

    sobald ich aber die funktionen vertausche und vorher funktion2 definiere, wird alles korrekt compiliert.
    Code:
    #include <iostream>
    using namespace std;
    
    int funktion2(int inputZahl)
    {
        return inputZahl * inputZahl;
    }
    
    int funktion()
    {
        return funktion2(5);
    }
    
    int main (int argc, const char * argv[])
    {
        int a;
        a = funktion();
        cout << "a = "<< a <<"\n";
        cout << "Hello, World!\n";
        return 0;
    }
    
    warum kommt es ueberhaupt zu diesem fehler? nur dadurch das ich eine funktion deklariere wird sie ja nicht ausgefuert oder? musss ich immer wen ich klassen oder funktionen deklariere darauf achten wo genau sie im code stehen damit sie der compiler nicht rauswirft?

    danke im vorraus, joedelord
     
    joedelord, 17.07.2004
  2. Gibberish

    GibberishMacUser Mitglied

    Mitglied seit:
    17.04.2004
    Beiträge:
    46
    Zustimmungen:
    0
    Nein, ausgeführt wird die durch die Deklaration nicht allerdings und der "Fehler" (eigentlich ist es keiner) Tritt auf, weil Du eben die Funktion nicht deklariert sondern nur implementiert hast.
    Man kann die Deklaration weglassen, deswegen ist es kein Fehler, aber dann muss man eben drauf achten, daß eine Funktion im Quelltext vor dem Aufruf steht.

    Wenn Du hinter die includes folgendes schreibst:
    Code:
    int funktion();
    int funktion2(int inputZahl);
    
    Kannst Du die Funktionen im Code an jeder beliebigen Stelle positionieren.

    Wenn Du deklarierst stellt sich dieses Problem nicht und da Klassen immer deklariert werden müssen; kein Problem. Lediglich Funktionen müssen nicht deklariert werden sobald Du aber mit mehreren Units arbeitest kommst Du eh nicht um Header Files rum in denen eben dann die Deklaration steht wo hingegen das zugehörige c++ file die Implementierung enthält.

    Bis neulich ...
     
    Gibberish, 17.07.2004
  3. joedelord

    joedelord Thread StarterMacUser Mitglied

    Mitglied seit:
    12.12.2002
    Beiträge:
    481
    Zustimmungen:
    0
    vielen dank fuer die hilfe, schoen langsam blicke ich ein bischen durch c++ durch. jetzt weis ich endlich genau was diese fehlermeldung bedeutet.

    danke, joedelord

    edit: verhaelt sich das mit methoden gleich? kann es bei dabei auch zu diesem fehler kommen?
     
    joedelord, 17.07.2004
  4. Toni-P

    Toni-PMacUser Mitglied

    Mitglied seit:
    23.12.2003
    Beiträge:
    127
    Zustimmungen:
    21
    In C++ ist es eigentlich auch üblich, das Interface der zu implementierenden Klasse in einer Header-Datei (*.h) anzugeben und diese in die Implementations-Datei (*.cpp) zu includen. Dann hast du dieses Problem nicht mehr.
     
    Toni-P, 17.07.2004
  5. joedelord

    joedelord Thread StarterMacUser Mitglied

    Mitglied seit:
    12.12.2002
    Beiträge:
    481
    Zustimmungen:
    0
    danke fuer die hilfe, das erleichtert mir meine arbiet.

    lg, joedelord
     
    joedelord, 18.07.2004
  6. BadHorsie

    BadHorsieMacUser Mitglied

    Mitglied seit:
    21.04.2004
    Beiträge:
    335
    Zustimmungen:
    0
    Methoden sind Funktionen ;-)

    In C war es üblich die Funktionsprototypen oberhalb der Main_Funtion zu sammeln und Die Funktionen an sich unterhalb der main() zu implementieren. Sieht man noch relativ häufig in älteren Quelltexten.

    Wie schon erwähnt packt man in grösseren Projekten die Funktionen in .c Dateien und die Zugehörigen Prototypen in .h (Header) Dateien. Das alles wird dann richtig interessant wenn man mit shared Libraries arbeitet. Dort liegen die Funktionen in einer kompilierten (binären) .so, .a oder .dylib Datei. Die Funktionen werden dann über die zugehörigen .h Files angesprochen.

    BadHorsie
     
    BadHorsie, 18.07.2004
Die Seite wird geladen...
Ähnliche Themen - C++ Compiler Frage
  1. Estournel
    Antworten:
    4
    Aufrufe:
    687
    Estournel
    10.12.2012
  2. _toom_
    Antworten:
    21
    Aufrufe:
    3.351
  3. mattesmusic
    Antworten:
    11
    Aufrufe:
    1.047
    Willeswind
    19.05.2008
  4. Gilmondo
    Antworten:
    4
    Aufrufe:
    594