我在基类中创建了一个变量,它是模板的向量,但是我无法从派生类中访问此成员,有人可以解释一下吗?
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
/*
*
*/
template <typename T>
class Apple{
protected:
public:
vector<T> vec;
virtual void foo(T node) =0;
};
template <typename T>
class Ball:public Apple<T>{
public:
void foo(T node){
cout<<"hahaha\n";
vec.push_back(node);/* I GET COMPILATION ERROR HERE"vec was not declared in this scope"*/
}
};
int main(int argc, char** argv) {
Ball<int> b;
b.foo(10);
return 0;
}
答案 0 :(得分:2)
成员vec
是模板参数dependent type,因此编译器需要一些帮助,如:
this->vec.push_back(node);
或使用限定名称:
Apple<T>::vec.push_back(node)
感谢@Avran Borborah - Why am I getting errors when my template-derived-class uses a member it inherits from its template-base-class?
以下是规则:在查找非依赖名称(如
B<T>
)时,编译器不会查找依赖基类(如f
)。这并不意味着继承不起作用。 ...
答案 1 :(得分:0)
您尚未在基类中创建任何私有成员。 要解决该错误,您可以使用以下命令替换产生编译错误的行: 苹果:: vec.push_back(节点); 要么 这 - &GT; vec.push_back(节点)