public Methode wird nicht gefunden



  • Hallo,

    irgendetwas mache ich falsch, leider weiß ich aber gerade gar nicht was 😞 Vielleicht kann mir einer kurz helfen.

    ich habe eine Klasse die eine public methode enthällt. Also z.B.

    class test {
      public int test (){
        return 100;
      }
    }
    

    Nun habe ich die Klasse als Library genommen und möchte sie dann halt wo anders in einer main-Methode aufrufen.
    Dann bekomme ich aber den Error:
    undefined reference to 'test()'
    collect 2: ld returned 1 exit status

    Was mache ich da nun falsch?



  • also im BCB funktioniert das so:
    [cpp] class test
    {
    public**:** // ":"
    int test ()
    {
    return 100;
    }; // ";"
    }
    [/cpp]
    ich denke mindestens das ";" ist nötig



  • Du hast natürlich recht, dass nach dem publich noch ein Doppelpunkt kommt, allerindgs ändert dies nichts an meinem Problem! Leider auch nicht ein Simikolon am Ende der Methode. Muss ich anstatt public ein anderes Schlüsselwort benutzen?



  • BigNeal schrieb:

    ich denke mindestens das ";" ist nötig

    nee, der ':' war nötig.
    aber abgesehen davon frage ich mich, wieso ein konstruktor was zurückgeben kann.



  • Äh verdammt, das Beispiel ist natürlich großer Mist. Es handelt sich natürlich nicht um einen Kostruktor sondern um eine normale Methode!!!

    Also vergesst lieber das Beispiel 🙂



  • Nein, nach der Methode kommt kein ;! Aber nach der Klassendefinition 🙂

    class test {
      public:
      int foo() {
        return 100;
      }
    }; //<--!
    

    so etwas erzeugt oft unverständliche Fehlermeldungen 😉



  • Ja, soweit habe ich es aber schon richtig, daran liegt es nicht



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung 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.



  • germangeek schrieb:

    Ja, soweit habe ich es aber schon richtig, daran liegt es nicht

    @germangeek:
    Dann zeig doch mal _genau_ den Code, bei dem das Problem auftritt.

    Caipi



  • Okay, hier mal mein Code:

    1. Test.cpp

    #include "Test.h"
    class Test{
    public: int Test() {
      return 100;
    }
    };
    

    2. Test.h

    int Test(void);
    

    Aus den beiden oberen erstelle ich eine Libary, di ich dann im nächsten aufrufen will.

    3. Main.cpp

    #include <iostream>
    #include "Test.h"
    
    using namespace std;
    
    class Main{
      int main () {
        cout << Test() << endl;
        return 0;
      }
    };
    

    Wenn ich dass nun kompiliere:
    g++ -fPIC -DPIC -c Test.cpp
    ar rcs libTest.a Test.o
    g++ -L. -o Main Main.cpp -lTest

    dann bekomme ich folgende Fehlermeldung:

    /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crt1.o(.text+0x18): In function_start': ../sysdeps/i386/elf/start.S:115: undefined reference tomain'
    collect2: ld returned 1 exit status
    make: *** [all] Fehler 1

    Wo ist da nun der Fehler drin? 😞



  • class WlanDummy{
    
    public: 
    int Test() 
    {
      return 100;
    }
    };
    
    #include "stdafx.h"
    #include "Klassen.h"
    //#include <iostream>
    
    using namespace std;
    int main()
    {
    	WlanDummy objekt;
    	std::cout << objekt.Test();
    
    	cin.ignore();
    
    }
    
    class Main{
      int main () {
        cout << Test() << endl;
        return 0;
      }
    };
    

    Geht das überhaupt mit der Mainmethode in einer Klasse?



  • Nö, glaube nicht, dass das geht...

    die Test.h muss so ausschauen:

    class WlanDummy
    {
    public:
        int Test();
    };
    

    und in der Main dann wie steff3 schon geschrieben hat ein Objekt der Klasse erstellen und darauf Test() aufrufen.



  • Hier siehts aus als hätte jemand zu lange Java programmiert 😮

    // test.h
    class Test
    {
        public:
            int test ();
    };
    
    // test.cpp
    #include "test.h"
    
    int Test::test ()
    {
        return 100;
    }
    
    // main.cpp
    #include <iostream>
    #include "test.h"
    using namespace std;
    
    int main ()
    {
        Test obj;
        cout << obj.test() << endl;
        return 0;
    }
    

    MfG SideWinder



  • Recht hast du! 😃

    Danekschön!


Anmelden zum Antworten