C++ : attributs hérités non accessibles

Résolu/Fermé
renan - 13 juin 2012 à 10:41
 renan - 13 juin 2012 à 11:59
Bonjour,

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

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
13 juin 2012 à 11:27
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:
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.
0
Merci beaucoup, ça marche =D
0