frage zu funktionen in strukturen



  • Linkst du denn die mystruct-Objektdatei mit?



  • typedef struct
    {
      int t_value;
      void t_sayHello(); // () fehlte
    } T_MyStruct;
    
    void T_MyStruct::t_sayHello() // Rückgabedatentyp fehlte
    {
        cout << "hello" << endl;
    }
    


  • @Dweb: thnx, fehlte in der tat.

    die objekt datei tue ich mitlinken.

    trotzdem meckert gcc.



  • uebrigens das kleine beispiel ist uebrigens ueberpruef-tauglich und die linker meldung ist eine

    undefined reference linker meldung, sobald der rumpf in der cpp-datei steht.



  • Wie rufst du den gcc denn auf?
    Klingt so als würdest du die eine .cpp Datei nicht mitkompilieren/linken.



  • pepe75 schrieb:

    #include <iostream>
    using namespace std;
    
    typedef struct
    {
      int t_value;
      void t_sayHello;
    } T_MyStruct;
    

    Using-Direktiven haben in Header-Dateien nichts zu suchen. (!!!)

    Da Du eh Dein struct mit einer Elementfunktion ausstatten willst, was ja in C gar nicht geht, kannst Du Dir auch das typedef sparen. Das ist in C++ überflüssig:

    struct MyStruct
    {
      int value;
      void sayHello();
    };
    

    kk



  • pepe75 schrieb:

    #include <iostream>
    using namespace std;
    
    typedef struct
    {
      int t_value;
      void t_sayHello;
    } T_MyStruct;
    

    Using-Direktiven haben in Header-Dateien nichts zu suchen. (!!!)

    Da Du eh Dein struct mit einer Elementfunktion ausstatten willst, was ja in C gar nicht geht, kannst Du Dir auch das typedef sparen. Das ist in C++ überflüssig:

    struct MyStruct
    {
      int value;
      void sayHello();
    };
    

    kk



  • dass using directiven ausserhalb von headern stehen muessen ist mir neu (grund?)

    das mit dem typedef ruehrt daher, weil der original-code ein misch-masch aus altem C und neuem C++ ist und ich das kleine beispiel hier danach gerichtet habe.

    trotzdem keine idee wegen des linker-fehlers?

    gruss



  • ok, das mit dem hinweis wegen der using directiven leuchtet jetzt ein -> durch das includieren des headers ist die using directive ja dann auch fuer die includierenden stellen eingefuegt, was man vielleicht nicht moechte (namensraumkonflikte etc.)



  • pepe75 schrieb:

    trotzdem keine idee wegen des linker-fehlers?

    Ja: Du hast bestimmt irgendwas falsch gemacht. :p

    Poste nochmal ne detaillierte Beschreibung von dem, was Du eigentlich machst -- inklusive Compiler/Linker-Aufruf und der Fehlermeldung.

    kk


Anmelden zum Antworten