No obtengo ese error de compilación en VC9. Sin embargo, hay varios problemas con el código: en primer lugar, no necesita ser una clase de plantilla, ya que está escrito actualmente ... ¿pero tal vez simplemente lo simplificó para esta pregunta? En segundo lugar, la clase base debe tener un destructor virtual.
#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;
}
Puesto que usted está aprendiendo acerca de las plantillas, sugeriría no mezclar conceptos (herencia & plantillas) mientras se aprende. Empezar con un ejemplo sencillo como esto ...
#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;
}
El concepto importante en el código anterior es que escribimos UNO función que sepa sumar enteros y cadenas (y muchos otros tipos para el caso).
Sus clases base necesitan un destructor virtual público o un destructor no virtual protegido/privado. – GManNickG
BTW, ¿qué clase es abstracta en esto? – Chubsdad