这个问题已经在这里有了答案:
已关闭10年。
以下代码给了我编译错误。怎么了?
struct Base {
int amount;
};
template<class T> struct D1 : public Base {
};
template<class T>
struct D2 : D1<T> {
void foo() { amount=amount*2; /* I am trying to access base class data member */ };
};
int main() {
D2<int> data;
};
test.cpp: In member function 'void D2<T>::foo()':
test.cpp:11: error: 'amount' was not declared in this scope
如何解决这个问题?
谢谢
最佳答案
这里的问题与如何在从模板基类继承的模板类中查找名称有关。它背后的实际规则很神秘,我不知道这些规则是什么。我通常必须查阅引用资料,以准确了解为什么它不起作用。
解决此问题的方法是使用this->
明确为要访问的成员添加前缀:
void foo() {
this->amount = this->amount * 2; // Or: this->amount *= 2;
}
这为编译器提供了有关
amount
名称来自何处的明确提示,并应解决编译器错误。如果有人想对发生此错误的原因进行更详细的描述,我希望看到一个很好的解释。
关于C++模板类和继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4919322/