c++ - 模板基类初始化

标签 c++ templates gcc initialization

在 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是模板,不是类型。

请注意,在通常情况下,BaseDerived<T> 的范围内查找,这意味着它将首先找到继承自Base<T>的注入(inject)类名,它指的是类型 Base<T> .但是因为你有一个依赖的基类,这个名字继承自 Base<T>未找到(未查看基类范围)。

关于c++ - 模板基类初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860783/

相关文章:

c++ - 函数指针指向静态成员类的错误 C2065

c++ - 参数包构造函数在类模板中隐藏用户定义的转换

javascript - 返回按钮从 javascript 模板加载相关的 html

c - 生成带有前缀的宏的宏函数(避免字符串化)

c++ - 字符串正则表达式替换需要 6 个参数但是..MinGW,CMake,w7

c++ - QT 线程:获取 QObject::startTimer:定时器不能从另一个线程警告启动

c++ - 如何使类不可继承

c++ - 这些宏在编译时是否使用 gcc 计算出相同的代码?

C:架构 x86_64 的重复符号

c++ - 使用 std::enable_if 和可变参数基类