Ich habe eine alte Codebasis hier, wo sie geschützte Member Variablen verwendet. Ob das eine gute Idee ist oder nicht, kann diskutiert werden. Der Code muss jedoch ordnungsgemäß mit gcc3 kompiliert worden sein. Ich habe eine Template-Klasse Bar abgeleitet, dieZugriff geschütztes Mitglied einer Klasse in einer abgeleiteten Klasse
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
Und in der Methodendeklaration von Bereinigungs wie so Mitglied x von Klassenvorlage Foo geschützt() verwendet, es ist etwas mit x
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
Nachdem dies geschehen ist, tut funktioniert nicht mit gcc4, obwohl es mit gcc3 funktioniert haben sollte. Es funktioniert, wenn ich es zu
doSomeThingCleanUpLike (this->x);
ändern Warum ist das der Fall?
Der Begriff "Vorlagenklasse" ist oft die Quelle der Verwirrung. Der korrekte Begriff ist "Klassenvorlage", weil die Sache eine Vorlage für Klassen ist. Es ist keine Klasse. Ich würde Ihre Frage bearbeiten, aber es ist möglicherweise einer der Gründe, warum Sie verwirrt wurden. – MSalters
Ihre Funktionsdefinition von "Bereinigung" ist nicht konform. Fehlende Rückgabetypen und Vorlagensegmente für "Bar". Sicher, so ist es in deinem Code? –
Danke litb. Ich habe es geändert. Koffeingehalt war nicht hoch genug, um es zu erkennen. Auch in "Klassenvorlage" geändert. Ob die Vorlagenklasse oder Klassenvorlage das Problem nicht beeinflusst. Der Begriff wird nur informell verwendet. – GeeF