Je ne reçois pas cette erreur de compilation dans VC9. Cependant, il y a plusieurs problèmes avec le code: Premièrement, il n'a pas besoin d'être une classe modèle comme c'est actuellement écrit ... mais peut-être vous l'avez simplement simplifié pour cette question? Deuxièmement, la classe de base devrait avoir un destructeur virtuel.
#include <iostream>
using namespace std;
class class0 {
public:
virtual ~class0(){}
protected:
char p;
public:
char getChar();
};
class class1 : public class0 {
public:
void printChar();
};
void class1::printChar(){
cout << p << endl;//p was not declared in this scope
}
int main() {
class1 c;
c.printChar();
return 1;
}
Depuis que vous apprenez sur les modèles, je suggère de ne pas mélanger les concepts (héritage & modèles) tout en apprenant. Commençons par un exemple simple comme ça ...
#include <iostream>
#include <string>
using namespace std;
template <typename T>
T add(const T& a, const T& b) {
return a + b;
}
int main() {
int x = 5;
int y = 5;
int z = add(x, y);
cout << z << endl;
string s1("Hello, ");
string s2("World!");
string s3 = add(s1, s2);
cout << s3 << endl;
return 1;
}
Le concept important dans le code ci-dessus est que nous avons écrit fonction ONE qui sait comment ajouter des entiers et des chaînes (et beaucoup d'autres types d'ailleurs).
Vos classes de base ont besoin d'un destructeur virtuel public ou d'un destructeur non virtuel protégé/privé. – GManNickG
BTW, quelle classe est abstraite dans ce domaine? – Chubsdad