"'之前的'primary-expression'.' 令牌错误"以g ++为单位

pro*_*eek 3 c++ g++

我有这个C++代码来生成"primary-expression before".令牌'错误与g ++编译器.它与cl(MSVC)编译器编译好.

template<typename T>
class A : public std::auto_ptr<T>
{
    typedef std::auto_ptr<T> Super;
public:
    A() : Super() { }
    A(T* t) : Super(t) { }
    A(AP<T>& o) : Super(o) { }
    operator bool() { return !!Super.get(); } <--- error!
};
Run Code Online (Sandbox Code Playgroud)

这段代码出了什么问题?

Jam*_*lis 8

Super是一种类型.如果要调用基类函数,可以通过this以下方式执行:

this->get();
Run Code Online (Sandbox Code Playgroud)

注意,this->这里只需要因为get()是依赖基类的成员函数; 也就是说,一个依赖于模板参数的基类T.有关更多信息,请参阅Parashift C++ FAQ文章,"当我的模板派生类使用从模板基类继承的成员时,为什么会出现错误?"

  • 注意,如果`get()`是虚拟的,`this-> get()`和`Super :: get()`意味着两个不同的东西. (2认同)