C++ : attributs hérités non accessibles
Résolu
renan
-
renan -
renan -
Bonjour,
Je code un petit projet pour un cours de c++
Je suis face à un problème étrange donc je vous donne un extrait
Il souligne val1 et val2 dans le contructeur d'OP_Plus et me dit que "val1 n'est ni un membre de donnée non statique, ni une classe de base de la classe OP_Plus"
Pourtant OP_Plus (opération plus) et censée hériter des attributs protected de OperationBinaire.
Avez vous une idée de la raison de ce bug ? Ca ne veux pas compiler :/
Je code un petit projet pour un cours de c++
Je suis face à un problème étrange donc je vous donne un extrait
class OperationBinaire : public Operation{ protected: Expression * val1; Expression * val2; }; class OP_Plus : public OperationBinaire { public: OP_Plus(Expression * valA,Expression * valB):val1(valA),val2(valB){} };
Il souligne val1 et val2 dans le contructeur d'OP_Plus et me dit que "val1 n'est ni un membre de donnée non statique, ni une classe de base de la classe OP_Plus"
Pourtant OP_Plus (opération plus) et censée hériter des attributs protected de OperationBinaire.
Avez vous une idée de la raison de ce bug ? Ca ne veux pas compiler :/
2 réponses
Salut.
val1 et val2 sont des variables de la classe mère. Normalement, elles devraient être initialisées par le constructeur de la classe mère:
Tu peux essayer en spécifiant bien la portée :
Je pense qu'une fois encore la réponse est donnée par le compilateur, qui en général suit les spécifications du langages :
val1 n'est ni un membre de donnée non statique, ni une classe de base de la classe OP_Plus Ce que j'interprète dans l'autre sens, que les seuls variables que tu peux initialisé ainsi dans le constructeur sont soit un membre de donnée non statique soit une classe de base (une classe mère) et rien d'autre.
val1 et val2 sont des variables de la classe mère. Normalement, elles devraient être initialisées par le constructeur de la classe mère:
OP_Plus(Expression * valA,Expression * valB): OperationBinaire(valA,valB){}je pense que la notation que tu utilises est réservé aux données membres et non hérité (à vérifier tout de même).
Tu peux essayer en spécifiant bien la portée :
OP_Plus(Expression * valA,Expression * valB):OperationBinaire::val1(valA),OperationBinaire::val2(valB){}sans garantie. Mais ce qui devrait fonctionner (sinon, il y a un problème) :
P_Plus(Expression * valA,Expression * valB){val1=valA;val2=valB;}
Je pense qu'une fois encore la réponse est donnée par le compilateur, qui en général suit les spécifications du langages :
val1 n'est ni un membre de donnée non statique, ni une classe de base de la classe OP_Plus Ce que j'interprète dans l'autre sens, que les seuls variables que tu peux initialisé ainsi dans le constructeur sont soit un membre de donnée non statique soit une classe de base (une classe mère) et rien d'autre.