Я не получаю эту ошибку компилятора в VC9.Однако с кодом есть несколько проблем: во-первых, он не должен быть классом шаблона, как он написан в настоящее время ... но, может быть, вы просто упростили его для этого вопроса?Во-вторых, базовый класс должен иметь виртуальный деструктор.
#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;
}
Поскольку вы изучаете шаблоны, я бы предложил не смешивать понятия (наследование и шаблоны) во время обучения.Начните с простого примера, подобного этому ...
#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;
}
Важная концепция в приведенном выше коде заключается в том, что мы написали ONE функцию, которая знает, как добавлять целые числа и строки (и многие другиетипы в этом отношении).