在 visual c++ 中接受以下代码时,g++ 将生成错误: “类 Derived 没有任何字段名称 Base” 哪个符合标准?
template <class T>
class Base
{
public:
Base(){};
};
template <class T>
class Derived:public Base<T>
{
public:
Derived():Base(){}
};
顺便说一句:两者都接受
Derived():Base<T>(){}
所以同时,我会关注gcc
最佳答案
MSVC++ 不正确。 Base
是模板,不是类型。
请注意,在通常情况下,Base
在 Derived<T>
的范围内查找,这意味着它将首先找到继承自Base<T>
的注入(inject)类名,它指的是类型 Base<T>
.但是因为你有一个依赖的基类,这个名字继承自 Base<T>
未找到(未查看基类范围)。
关于c++ - 模板基类初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860783/