我编写了一个模板基类,如下所示:
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() {}
现在,我正在尝试编写一个派生类,如下所示:
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