可能重复:
GCC 问题:使用依赖于模板参数的基类成员
我以为我对 C++ 很熟悉,但显然还不够熟悉。
问题是当您在模板类中定义常量时,您可以在派生自该类的新类中使用该常量,但不能在派生自该类的新模板类中使用该常量。
例如,gcc 说
test.h:18: 错误: 'theconstant' 未在此范围内声明
当我尝试编译这个(简化的)头文件时:
#pragma once
template <typename T> class base
{
public:
static const int theconstant = 42;
};
class derive1 : public base<size_t>
{
public:
derive1(int arg = theconstant) {}
};
template<typename T> class derive2 : public base<T>
{
public:
derive2(int arg = theconstant) {} // this is line 18
};
所以问题是一个类 ,derive1
编译得很好,但另一个类 ,derive2
是一个模板专业化,却没有。
现在也许 gcc 的错误还不够清楚,但我不明白为什么 in 中的构造函数的derive2
作用域与derive1
.
万一这很重要,这发生在头文件本身的编译期间,而不是在实例化类型的对象时derive2<type>
。
我也知道要进行哪些更改才能进行编译,因此我并不是真的在寻找单行代码作为答案。我想了解为什么会这样!我尝试在网上搜索,但显然我没有使用正确的搜索参数。