stolperte gerade über etwas, das ich nicht erklären kann. Der folgende Code lässt sich nicht kompilierenVerwendung von diesem manchmal notwendig?
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();
}
während, wenn ich ändern _attr = 3;
zu this->attr = 3;
es scheint kein Problem zu sein.
Warum ist das? Gibt es Fälle, in denen Sie das verwenden müssen?
verwendete ich g++ test.cpp -Wall -pedantic
zu kompilieren und zu bekomme ich folgende Fehler
test.cpp: in member function 'void super<b>::foo()':
test.cpp:11:3: error: '_attr' was not declared in this scope
Informieren Sie sich über [Zweiphasen-Namen-Suche] (http://blog.llvm.org/2009/12/dreaded- Zwei-Phasen-name-lookup.html). (Auch diese FAQ: [Warum bekomme ich Fehler, wenn meine von der Vorlage abgeleitete Klasse ein Mitglied verwendet, das sie von ihrer Vorlage-Basisklasse erbt?] (Http://www.parashift.com/c++faq/nondependent-name -lookup-members.html)) – ildjarn