【发布时间】:2018-03-05 11:04:17
【问题描述】:
我正在尝试从另一个部分专业化的模板类继承一个部分专业化的模板类。如果有人能解释是什么问题,我真的很感激。
例子:
template<typename T, typename U>
class Base
{
public:
int i;
Base(int _i) : i{_i}
{}
};
template<typename T, typename U>
class Derived: public Base<T, U>
{
public:
Derived(int _i) :Base<T, U>{_i}
{}
};
template<typename U>
class Base<int, U>
{
public:
int i ;
Base<int, U>(int _i)
:i{_i}
{}
};
template<typename U>
class Derived<int, U>: public Base<int, U>
{
public:
Derived(int _i)
: Base<int, U>{_i}
{}
void print_i()
{
std::cout << i << std::endl;
}
};
int main()
{
Derived<int, bool> X(10);
X.print_i();
return 0;
}
期望:我期望我可以从相同类型的派生类成员函数访问基类成员变量。
当前输出:编译时错误提示:使用未声明的标识符“i”
【问题讨论】:
-
在这种情况下,你必须明确告诉编译器
i应该在它的基础中找到,要么使用using声明,要么在其前面加上Base<int, U>::[编辑:或查找另一种使其成为从属名称的方法]。在这里,related。