Forum Programmation.c++ error: expected identifier before ‘&’ token

Posté par . Licence CC By‐SA.
Étiquettes : aucune
1
3
juil.
2021

Salutations !
Je (re)débute en C++, j'essaye un peu des trucs, et je suis tombé sur une erreur que je comprends pas trop...

le code suivant

class A {
};
class B {
 B(A* a) {
 }
};
class C {
 A a;
 B b(&a);
};

me retourne à la compilation

$ gcc test.cpp 
test.cpp:13:9: error: expected identifier before ‘&’ token
 13 | B b(&a);
 | ^

et je comprends pas bien ce qu'il veut... Si quelqu'un peux m'expliquer, merci d'avance :D

  • # Déclaration/Implémentation

    Posté par . Évalué à 2. Dernière modification le 03 juillet 2021 à 16:59.

    Ici, ton

     class C {
     A a;
     B b(&a);
     };

    est une déclaration de classe et «a» et «b» sont des membres de C. Il n'est donc pas possible de définir leur comportement tout de suite. Le compilo s'attend à un truc du genre:

     class C {
     A a;
     B b;
     C():b(&a) {
     // faire un truc ici
     B b2(&a); // ceci marche aussi ici
     }
     };
  • # Que prend la méthode?

    Posté par . Évalué à 2.

    Je comprends que tu déclares donc une méthode C::b qui renvoie un B et qui prend un argument nommé a, référence vers un type non fourni ?

    Si tu veux dire que ta méthode C::b prend un argument de type référence vers un A, alors la modification ci-dessous s'impose.

    class C {
     A a;
     B b(A&a);
    };

    Ce code compile, mais l'édition des liens n'est pas garantie (C::b n'est pas définie).
    Et ce n'est pas non plus ce que tu cherches à faire; mais ça, c'est un autre histoire !

  • # non-static data member with initializer (C++11)

    Posté par (site web personnel) . Évalué à 2.

    https://en.cppreference.com/w/cpp/language/class

    Ce qui me semble pouvoir être le plus proche de ton code...

    #include <iostream>
    class A
    {
     public:
     int i = 5;
    };
    class B
    {
     public:
     B( A* a )
     : pa(a)
     {;}
     A * pa;
    };
    class C
    {
     public:
     B b = B(&a);
     private:
     A a;
    };
    int main()
    {
     C c;
     std::cout << c.b.pa->i << std::endl;
    }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.