static class problem



  • Hy,
    Ich möchte eine Klasse A innerhalb einer Klasse B als static nutzen.
    Der code:

    class A
    {
    public:
       void fooA()
       {
           cout << "test" << endl; 
       }
    };
    
    class B
    {
    private:
      static A a;
    public:
      static void fooB()
      {
        B::a.fooA();
      }
    };
    

    ok...nochmal bearbeitet, aber Fehler nicht verschwunden!!!

    Angepasst und noch nicht lauffähig... kann man das vielleicht umgehen?
    Also aus einer Klasse mit static Methoden möchte ich eine Klasse für alle nutzbar machen. Mir würde sonst noch Singleton einfallen, dann aber mit dem Nachteil das ich die Instanz überall gleich habe.

    Fehler LNK2001 nicht aufgelöstes externes symbol "" private: static class A B::a"
    Fehler LNK1120 nicht aufgelöste externe verweise
    Ich nutze Visual Studio VC++ Win32 Konsole

    Danke

    LÖSUNG:

    HEADER A:
    class A
    {
    public:
       void fooA()
       {
           cout << "test" << endl; 
       }
    };
    
    HEADER B:
    class B
    {
    private:
      static A a;
    public:
      static void fooB(void);
    };
    
    SOURCE B:
    A B::a;
    void B::fooB()
    {
      B::a.fooA();
    }
    

    Danke an alle für die Lösung



  • fooA() ist private Kann also nicht von B aufgerufen werden.



  • Du musst die Variable noch definieren.



  • void fooA(); <-- das ist nur ein Versprechen an den Compiler, dass du irgendwo eine entsprechende Funktion machst. Hast du aber in dem Code nicht, daher meckert er nun mit dir.
    Probier mal void fooA(){};

    class A
    {
    public:
       void fooA(){};
    }
    
    class B
    {
    private:
      static A a;
    public:
      static void fooB()
      {
        B::a.fooA();
      }
    }
    


  • Muss ne class nicht mitn Semikolon beendet werden?

    class foo
    {
    };

    du hast es so:

    class foo
    {
    } //kein Semikolon



  • So wie PI schon geschrieben hat, es fehlt noch die Definition der Variablen (in der Source-Datei, NICHT im Header - wegen der One Definition Rule (ODR)):

    A B::a;
    

Anmelden zum Antworten