error: invalid use of member function



  • Hallo, ich möchte eine Referenz zu einer Player Instanz im Game-Header deklarieren, was funktioniert, solange ich nicht explizit den Konstruktor aufrufe. Tue ich das, wird er glaube ich als Versuch einer Deklaration einer Methode aufgefasst. Wie kann ich das ändern?

    class Game
    {
    
    private:
    	sf::RenderWindow window;
    	Player player(100);
    
    ...
    
    class Player : sf::CircleShape
    {
    	
    public:
    	Player(int x);
    

    Error:

    error: expected identifier before numeric constant
      Player player(100);
    error: invalid use of member function ‘Player Game::player(int)’ (did you forget the ‘()’ ?)
           player.move(0, -1);
    
    


  • Player player{100}; oder Player player= Player(100); oder mit veraltetem Compiler initialisierst du in der Initialisierungsliste des Game Konstruktors und nicht im Header.



  • @manni66 Danke, jetzt funktioniert es. Wie kommt es, dass es in vielen Tutorials genau so gemacht wird? z.B

    int main(){
    
        Bruch objekt(7, 10); // Initialisierung von objekt
    
    }
    
    

    Oder hab ich da was falsch verstanden?



  • @daniel

    Das ist etwas anderes als die Initialisierung von Membervariablen im Header. Das funktioniert auch noch nicht so lange.



  • @daniel sagte in error: invalid use of member function:

    solange ich nicht explizit den Konstruktor aufrufe.

    Konstruktoren kann man nicht "explizit" (oder überhaupt irgendwie "aufrufen") weil sie keine Namen haben. Was du hier

    @daniel sagte in error: invalid use of member function:

    	Player player(100);
    

    versuchst ist default member initialization, aber die Syntax stimmt halt nicht. Egal ob header oder sonstwo. Da geht ein brace-or-equal-initializer, also

    struct foo
    {
        int bar = 42;
    };
    

    oder

    struct foo
    {
        int bar{ 42 };
    };
    

    aber nicht

    struct foo
    {
        int bar(42);
    };
    

Log in to reply