继承模板 base class - base class 成员的作用域解析

Inheriting a template base class - scope resolution of base class members

我写了一个模板库class如下:

template<typename T>
class Base {
public:
    Base(T x);
    void print_base();
    virtual ~Base();
protected:
    T data;
};

template<typename T>
Base<T>::Base(T x) : data(x) {}

template<typename T>
void Base<T>::print_base()
{
    std::cout << data << std::endl;
}

template<typename T>
Base<T>::~Base() {}

现在,我正在尝试编写一个派生的 class,如下所示:

template<typename T>
class Derived : public Base<T>
{
public:
    Derived(T x);
    void print_derived();
private:
};

template<typename T>
Derived<T>::Derived(T x) : this->Base(x) {}

template<typename T>
void Derived<T>::print_derived()
{
    this->print_base();
    std::cout << " data " << this->data << std::endl;
}

但是编译器在下面一行报告错误:

template<typename T>
Derived<T>::Derived(T x) : this->Base(x) {}

错误如下:

template_derived_class_this.h:12:28: error: expected identifier before 'this'
 Derived<T>::Derived(T x) : this->Base(x) {}

如果我将其更改为以下错误消失:

 Derived<T>::Derived(T x) : Base<T>::Base(x) {}

我的问题是this->前缀格式错误的原因是什么?是因为在构造函数完成 运行 之前 this 指针还没有准备好,还是我在这里犯了任何语法错误?我已经看到 this-> 在其他地方的构造函数中使用。所以不确定在我的案例中错误的原因是什么。 我正在使用以下命令进行编译:

g++ template_inheritance_main_this.cpp -o template_inheritance_main_this  -Wall
  -Wextra -Wpedantic -Werror

您可以在构造函数主体中使用 this,在初始化基础 class 期间,this 不可用,您只需使用基础 class 名称将其初始化为你在改变你的代码片段中做了。派生的 class 的构造函数应如下所示:

template<typename T>
Derived<T>::Derived(T x) : Base<T>(x) {}