natknąłem się na coś, czego nie potrafię wyjaśnić. Poniższy kod nie kompilujeKorzystanie z tego czasami jest konieczne?
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();
}
natomiast gdy mogę zmienić _attr = 3;
do this->attr = 3;
wydaje się, że nie ma problemu.
Dlaczego tak jest? Czy są jakieś przypadki, w których musisz użyć tego?
użyłem g++ test.cpp -Wall -pedantic
skompilować i pojawia się następujący błąd
test.cpp: in member function 'void super<b>::foo()':
test.cpp:11:3: error: '_attr' was not declared in this scope
Poczytaj na ten temat [nazwa dwufazowym odnośnika] (http://blog.llvm.org/2009/12/dreaded- dwufazowa nazwa-lookup.html). (Również niniejsze FAQ: [Dlaczego otrzymuję błędy, gdy moja klasa pochodna szablonu używa członka, który dziedziczy po swojej klasie bazującej na szablonie?] (Http://www.parashift.com/c++-faq/nondependent-name -lookup-members.html)) – ildjarn