#include <vector>
#include <iostream>
template <class T>
class Base
{
protected:
std::vector<T> data_;
};
template <class T>
class Derived : public Base<T>
{
public:
void clear()
{
data_.clear();
}
};
int main(int argc, char *argv[])
{
Derived<int> derived;
derived.clear();
return 0;
}
我不能编译这个程序。我得到了:
main.cpp:22: error: 'data_' was not declared in this scope
请解释一下为什么在Derived
类中看不到data_
?
发布于 2012-08-20 12:44:09
要解决此问题,您需要指定Base<T>::data_.clear()
或this->data_.clear()
。至于为什么会发生这种情况,请参阅here。
发布于 2012-08-20 12:43:51
在模板的情况下,编译器无法确定成员是否真的来自基类。所以使用this
指针,它应该是有效的:
void clear()
{
this->data_.clear();
}
当编译器查看派生类定义时,它不知道继承了哪个Base<T>
(因为T
是未知的)。此外,data_
不是template
参数或全局可见变量中的任何一个。因此,编译器对此进行了抱怨。
https://stackoverflow.com/questions/12032345
复制相似问题