Bonjour,
J'ai un problème sur lequel je bloque depuis un petit temps : Le constructeur de ma classe dérivée appelle le constructeur de la classe mère car ces 2 classes possèdent les mêmes attributs.
Hors, dans les fonctions de surcharges d'opérateur de la classe dérivée, j'ai une erreur à la compilation qui dit
"_values" was not declared in this scoop
J'en conclus que la classe dérivée n'a pas été bien "construite" car elle n'a pas accès aux attributs, sauriez-vous m'aider à ce sujet? Je débute en c++ et j'ai vraiment du mal
Voici mon code si cela peut aider :
Classe mère .cpp et .hpp :
http://pastebin.com/5YH5azjd
http://pastebin.com/e0x7X8by
Classe dérivée .cpp et .hpp :
http://pastebin.com/kUpiVDfP
http://pastebin.com/BEKtrNWi
Perso c'est plus l'écriture des fonctions qui me parait bizarre, là tu déclare des nouvelles classes de j'sais pas quoi j'sais pas trop comment à chaque fois
Les fonctions sont plutôt censées ressembler à ça :
template <typename T>
T maclasse<T>::operator+(T machin)
{
//truc
}
Puis dans le .hpp les fonctions prennent en paramètre un "Elem&" alors que dans le .cpp c'est un "Elem"
Je ne peux pas voir ton code pour des raisons personnelles, mais vérifie que les attributs de la classe de base soit protected ou public afin d'en hérité et de pouvoir les initialiser.
Le 25 novembre 2015 à 19:13:35 1234_bou a écrit :
Je ne peux pas voir ton code pour des raisons personnelles, mais vérifie que les attributs de la classe de base soit protected ou public afin d'en hérité et de pouvoir les initialiser.
Oui oui, les attributs sont bien Protected
Le 25 novembre 2015 à 19:05:54 LEpigeon-888 a écrit :
Perso c'est plus l'écriture des fonctions qui me parait bizarre, là tu déclare des nouvelles classes de j'sais pas quoi j'sais pas trop comment à chaque foisLes fonctions sont plutôt censées ressembler à ça :
template <typename T> T maclasse<T>::operator+(T machin) { //truc }
Puis dans le .hpp les fonctions prennent en paramètre un "Elem&" alors que dans le .cpp c'est un "Elem"
EN effet j'ai vu cette faute j'ai donc corrigé en
template <typename Elem>
Elem Vector_D<Elem>::Vector_D operator+(Elem a){
Vector_D<Elem> res(_dim);
for (std::size_t i = 0; i < _dim; i++) res[i] = _values[i] + a;
return res;
};
Mais maintenant j'ai :error: expected initializer before 'operator'
à la deuxième ligne
Je n'ai plus d'erreur de compilation, j'ai uniquement
error: '_dim' was not declared in this scoop
Même chose pour values, et ce pour les 3 operateurs
Quand je fais un
This._dim
Le code fonctionne, mais je voudrais savoir pourquoi, Pourquoi il faut mettre un this pour la classe dérivée mais pas pour la classe mère
Il y a toujours le problème du Elem&/Elem, après je sais pas trop si le fait d'utiliser les templates "corrige" le problème tout seul, mais vaudrait quand même mieux changer ça, même si j'pense pas que ça puisse régler ton problème.
Oui j'ai réglé, c'était pas vraiment une erreur, je modifiais juste mon code et je vous avais envoyé une version non vérifié, my bad !
Juste une autre question : Quand j'instancie ma classe dérivée, grâce au constructeur de ma classe mère avec par exemple :
Vector_D<int> test(10);
Pourquoi les 2 premiers éléments du tableau sont toujours des valeurs aléatoires ( suivant la place dans la mémoire) et non des 0 comme le reste des éléments?
Voici le constructeur :
Vector (std::size_t dim = 0): _dim(dim), _values(new Elem[dim]) {}
Comment faire en sorte que chaque éléments possède aucune valeur? Sans passer par NULL, ou NUL... etc car c'est une classe template, je ne sais pas d'avance si Values contiendra des int, double, float....