C++ Compiler Frage

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von joedelord, 17.07.2004.

  1. joedelord

    joedelord Thread Starter MacUser Mitglied

    Beiträge:
    481
    Zustimmungen:
    0
    MacUser seit:
    12.12.2002
    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
     
  2. Gibberish

    Gibberish MacUser Mitglied

    Beiträge:
    46
    Zustimmungen:
    0
    MacUser seit:
    17.04.2004
    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 ...
     
  3. joedelord

    joedelord Thread Starter MacUser Mitglied

    Beiträge:
    481
    Zustimmungen:
    0
    MacUser seit:
    12.12.2002
    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?
     
  4. Toni-P

    Toni-P MacUser Mitglied

    Beiträge:
    127
    Zustimmungen:
    21
    MacUser seit:
    23.12.2003
    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.
     
  5. joedelord

    joedelord Thread Starter MacUser Mitglied

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

    lg, joedelord
     
  6. BadHorsie

    BadHorsie MacUser Mitglied

    Beiträge:
    335
    Zustimmungen:
    0
    MacUser seit:
    21.04.2004
    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
     
    Zuletzt bearbeitet: 18.07.2004
Die Seite wird geladen...

Diese Seite empfehlen