Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Templates, Vererbung, name-lookup und 'using'-direktive

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.07.2007, 11:16 Uhr
~katana.
Gast


Nachdem ich meinen Quellcode, welcher ohne Fehlermeldungen von dem hervorragenden Microsoftcompiler übersetzt wird, mit gcc übersetzen will, kommt dieser aus dem meckern gar nicht mehr raus, folgender Code wird nich übersetzt:

C++:
template <typename T>
class Base {
  ...
  int   f();
  ...
};

template <typename T>
class Derived : public Base<T>
{
  ...
  int   g()   { return f(); }  // Fehler
  ...
};




Nach einigem suchen bin ich dahinter gekommen, dass gcc wohl dieses two-stage name lookup verwendet und deswegen f() nochmal extra deklariert werden muss - wie idotisch ist das denn!!!

Ich will nun aber nicht vor jede beschissene Variable und Methode this-> oder Base<T>:: schreiben müssen, da der Code dadurch extrem hässlich und unübersichtlich werden würde.

Weis jemand, ob man dieses Verhalten anders ausschalten kann??? Die vom gcc vorgeschlagene -fpermissive Compileroption wird schlicht ignoriert und ist ja auch nicht gerade eine schöne Lösung.
Ist es irgendwie möglich, 'using' auch auf Klassen anzuwenden?

C++:
using Base<T>
funktioniert jedenfalls nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.07.2007, 12:01 Uhr
Blubber2063



Also ich weiss ja nicht ob f private steht, auf jeden Fall wäre es bei Veerbung sehr sinvoll die Methode die du danach noch benutzen willst virtual zu machen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.07.2007, 12:08 Uhr
~katana.10SFMT
Gast



Zitat von Blubber2063:
Also ich weiss ja nicht ob f private steht, auf jeden Fall wäre es bei Veerbung sehr sinvoll die Methode die du danach noch benutzen willst virtual zu machen.


Das f nicht privat sein darf ist ja klar, da es ja sonst von Derived aus nich aufgerufen werden kann.
f virtual zu machen ist sinnlos, da es ja nicht ueberladen wird (zumindest in dem Beispiel).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.07.2007, 17:36 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich weiß nicht, was Du hast, aber das hier tuts doch:

C++:
template <typename T>
struct Base {

  int   f() {
        return 0;
        }
};

template <typename T>
struct Derived : public Base<T>
{
  int   g()   { return f(); }  // Fehler
};


int main() {
        Derived<int> x;
        x.g();
}



(Ich habs mal auf einem alten gcc 3.2 getestet)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.07.2007, 17:41 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


So wie es im Eingangsposting steht glaube ich nicht das das von irgendeinem Compiler übersetzt wird weil für f() ja keine Definition existiert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.08.2007, 18:09 Uhr
~foobar
Gast


Der g++ verhält sich korrekt. VC ist nicht Standardkonform...


C++:
template <typename T>
struct Base {

  int   f() {
        return 0;
        }
};

template <typename T>
struct Derived : public Base<T>
{
  int   g()   { return Base<T>::f(); }
};


int main() {
        Derived<int> x;
        x.g();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.08.2007, 18:37 Uhr
~wissender
Gast


...oder:


C++:
template <typename T>
struct Derived : public Base<T>
{
  int   g()   { return this->f(); }
};



oder:


C++:
template <typename T>
struct Derived : public Base<T>
{
  using Base<T>::f;
  int   g()   { return f(); }
};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: