рассмотрим следующий код:г ++, вытекающие из класса с параметром шаблона
template<class T>
class Base {
public:
void doSomething(){}
};
template<class T>
class Derived : public Base<T> {
public:
void doMore() {
doSomething(); //Affected line
}
};
В строке комментировал с «затрагиваемой линии» г ++ (4.7) говорит:
test.cc:11:16: error: there are no arguments to ‘doSomething’ that depend on a template parameter, so a declaration of ‘doSomething’ must be available [-fpermissive]
Теперь я задаюсь вопросом:
- Если параметр шаблона T не существует, эта ошибка не будет возникать. В чем разница?
- g ++, очевидно, способен решить эту проблему (если я добавлю -fpermissive, он компилируется отлично). Я предполагаю, что g ++ пытается сделать для меня лучший опыт работы как «пользователь» (программист). Каковы преимущества для меня, когда g ++ не принимает этот код?
Спасибо! Nathan
Изменить на 'this-> doSomething()' (или 'Base :: doSomething()'), так как 'doSomething()' зависит от типа 'T'. –
hmjd
type 'this-> doSomething();' –
@hmjd: Это интересно .. можете ли вы дать краткое описание того, как добавление 'this->' помогает? – Asha