Methodenaufruf



  • Hi,

    ich sitze gerade an einem C++ Tutorial, aber es will nicht funktionieren.

    int main(){
    
       char char_arr[5];
       char* charP = char_arr;
    
       int* intP = testFunction(charP);
    
    }
    
    int* testFunction(char* charP){
    
       int int_arr[25];
       int* intP = int_arr;
    
       //Do Something
    
       return intP;
    
    }
    

    Beim Kompilieren bekomm ich dann einen Fehler das der Bezeichner "testFunction" nicht gefunden wurde.
    Warum ? Wenn ich im Internet andere Tutorials anschaue, überall werden die Methoden einfach so aufgerufen. Liegt das an den Pointern die ich versuche zu übergeben ? Ich komm nicht drauf...



  • C++ hat ein One-Pass-Kompiler, daher mussen alle Symbole vor der Nutzung deklariert werden, kauf die ein gutes Buch.

    int* testFunction(char* charP);
    
    int main(){
    
       char char_arr[5];
       char* charP = char_arr;
    
       int* intP = testFunction(charP);
    
    }
    
    int* testFunction(char* charP){
    
       int int_arr[25];
       int* intP = int_arr;
    
       //Do Something
    
       return intP;
    
    }
    

    oder so:

    int* testFunction(char* charP){
    
       int int_arr[25];
       int* intP = int_arr;
    
       //Do Something
    
       return intP;
    
    }
    
    int main(){
    
       char char_arr[5];
       char* charP = char_arr;
    
       int* intP = testFunction(charP);
    
    }
    


  • Mhm, das hab ich mir eigtl gedacht, daher hab ich ne Header dazugebaut:

    class testClass {
    
    public:
    
       *int testFunction(char* pEingabe);
    
    };
    

    und die hab ich dann in der CPP eingebunden, mittels:

    #include "testClass.h"
    

    Nur kennt er die Methode testFunction dann immer noch nicht.
    Wo ist der Fehler jetzt ?


  • Administrator

    Wieso deklarierst du die Funktion nun plötzlich in einer Klasse? Wie kommst du auf die Idee? 😕

    Grüssli



  • Wieso packst du eine freistehende Funktion in eine Klasse? Wo ist der Sinn dabei?

    Welchen Fehler?



  • Okay, wenn ich aus der Header alles rauswerfe ausser der Funktion dann funktioniert es.
    Hatte im Internet nur gesehen das man in der Header die Variablen und Methoden in zBsp. public: oder private: Schubladen stecken kann und das geht ohne class nicht. Daher dachte ich das gehört immer dazu.

    Dann verstehe ich aber nicht wieso er es mit class in der cpp dennoch nicht kennt.

    Werd jetzt mal nach einem vernünftigen Buch suchen...



  • geht_nid schrieb:

    int* testFunction(char* charP){
    
       int int_arr[25];
       int* intP = int_arr;
    
       //Do Something
    
       return intP;
    
    }
    

    Der Speicher, auf den intP zeigt, wird nach Verlassen der Funktion ungültig! => böse



  • Jah, genau da bin ich vor 2min auch drüber gestolpert, das alle Zeiger in meiner main() ins Nirvana zeigen.
    Jetzt hab ich die Deklaration der Arrays aus den aufgerufenen Methoden einfach mit in die Header gepackt, so gehts jetzt zumindest mal 🙂


  • Administrator

    ... das Buch ist sehr dringend zu empfehlen 🙂
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-251551.html

    Grüssli



  • // Inhalt foobar.hpp
    class foobar
    {
    public:
       int foobar_calc();
    };
    
    // inhalt foobar.cpp
    int foobar::foobar_calc()
    {
       return 1;
    }
    

    So muss das man das bei Klassen machen.



  • Zeus schrieb:

    C++ hat ein One-Pass-Kompiler, daher mussen alle Symbole vor der Nutzung deklariert werden

    Nur in Klassen gilt das Ganze nicht, warum eigentlich?



  • wxSkip schrieb:

    Zeus schrieb:

    C++ hat ein One-Pass-Kompiler, daher mussen alle Symbole vor der Nutzung deklariert werden

    Nur in Klassen gilt das Ganze nicht, warum eigentlich?

    Was gilt nicht? - Bei Klassen gitl das gleiche. Vor der Benutzung der Klasse muss sie deklariert worden sein. Und wenn du sie verwenden willst (oder ein paar andere Sachen machen willst) dann musst sie sogar defniert worden sein (das muss bei Funktionen selbstverständlich nicht sein).

    Siehe dazu auch hier.



  • drakon schrieb:

    Was gilt nicht?

    Members sehen alle anderen Members, auch welche, die erst fünf Bildschirme weiter unten deklariert werden.



  • Ausnahme sind Memberdeklarationen, weil sie zu Klassenspezifikation gehören:

    struct Object
    {
    	Object() : obj(new Object()) { // Who the fuck is obj?
    
    	}
    
    	virtual ~Object() {
    		delete obj;
    	}
    
    	Object* obj; // Oh an obj!!!
    };
    

    An die hab ich nicht gedacht, da haben die Compilerbaue bisschen getrickst.


Anmelden zum Antworten