appena incappato in qualcosa che non so spiegare. Il seguente codice non viene compilatoL'utilizzo di questo a volte è necessario?
template<int a>
class sub{
protected:
int _attr;
};
template<int b>
class super : public sub<b>{
public:
void foo(){
_attr = 3;
}
};
int main(){
super<4> obj;
obj.foo();
}
mentre quando cambio _attr = 3;
a this->attr = 3;
non sembra esserci alcun problema.
Perché è quello? Ci sono dei casi in cui devi usare questo?
ho usato g++ test.cpp -Wall -pedantic
per compilare ed ottengo il seguente errore
test.cpp: in member function 'void super<b>::foo()':
test.cpp:11:3: error: '_attr' was not declared in this scope
Leggi su [a due fasi di ricerca del nome] (http://blog.llvm.org/2009/12/dreaded- bifase-nome-lookup.html). (Anche questa FAQ: [Perché sto ricevendo errori quando la mia classe derivata da template utilizza un membro che eredita dalla sua classe template-base?] (Http://www.parashift.com/c++-faq/nondependent-name -lookup-members.html)) – ildjarn