«Первичное выражение перед '.' ошибка токена "в g ++ - PullRequest
3 голосов
/ 09 марта 2011

У меня есть этот код C ++ для генерации "первичного выражения перед '."Ошибка токена с компилятором 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!
};

Что не так с этим кодом?

1 Ответ

8 голосов
/ 09 марта 2011

Super является типом.Если вы хотите вызвать функцию базового класса, вы можете сделать это через this:

this->get();

Обратите внимание, что this-> требуется только здесь, потому что get() является функцией-членом зависимого базового класса;то есть базовый класс, который зависит от параметра шаблона T.Для получения дополнительной информации обратитесь к статье часто задаваемых вопросов Parashift C ++, «Почему я получаю ошибки, когда мой производный от шаблона класс использует член, который он наследует от своего базового класса шаблона?»

...