Zeiger auf Elementfunktion unter kdevelop
-
Ich lerne gerade mit dem Buch C++ in 21 Tagen und bin jetzt auf ein Problem gestoßen. Ich benutze gcc - compiler unter kedevelop in SuSE Linux 10.0. Ich wollte einen Zeiger auf eine Elemenetfunktion,die keine Parameter aufnimmt erstellen und eine Elementfunktion aufrufen:
void (Mammal::*pHorse)() const = Speak;
Habs unter V c++ unter Microsoft getestet. Hat funktioniert. Aber in Kdevelop bekomme ich folgende Fehlermeldungen:
Invalid use of non - ststic Function ...
Cannot convert Mammal::*pHorse into Mammal::pHorse.
Was kann ich machen?
Hilfe! Bitte!
-
Zeig mal ein komplettes kleines Programm, das den Fehler zeigt.
-
#include <iostream> using namespace std; class Mammal { public: Mammal():itsAge(1) {} virtual ~Mammal() {} virtual void Speak() const = 0; protected: int itsAge: }; class Dog : public Mammal { public: void Speak() const { cout << "Wuff" << endl; } }; int main() { void *ptr = 0; ptr = new Dog; void (Mammal::*pFunc) const = 0: pFunc = Mammal::Speak; // hier kommt es zur Fehlermeldung (ptr->*pFunc)(); return 0; }Bei Visual c++ funktioniert das.
Bei kdevelop kommt bereits erwähnte Fehlermeldung.
Ich habe in den Projekteigenschaften rumprobiert. Wenn ich Programmausführung simulieren aktiviere, kann ich zwar ausführen, dafür kommt dann ein Speicherzugriffsfehler.//Edit: Codetags

-
Hm, kann es sein, dass im Buch einfach Mist steht oder Du das falsch verstanden hast?
Schau Dir mal das hier an:
http://www.josuttis.com/cppbuch/sonst/kompptr1.cpp.htmlAuch in den C++-FAQ gibt es dazu einen Eintrag:
http://www.c-plusplus.net/forum_dev/viewtopic-var-t-is-39450.htmledit: Ist aber ein Standard-C++-Problem, ich verschiebe Dich mal.
-
Wie wärs mal mit
// ... int itsAge; // Tippfehler // ... Mammal *ptr = 0; // void macht hier glaub keinen Sinn, denn // wozu sonst der ganze Aufwand mit Dog // und Mammal und so? Polymorphie... // ... void (Mammal::*pFunc)() const = 0; // Tippfehler pFunc = &Mammal::Speak; // Adresse, nicht die Funktion // selber...pFunc // ist schliesslich ein ZeigerZumindest hättest du die Tippfehler vermeiden können.
-
Hi,
schmeiss das Buch weg, das ist scheisse.
-
DANKE euch allen. Das Buch ist übrigens wirklich scheiße. Ist nicht der erste Fehler über den ich gestolpert bin. Frage mich nur, warum vc++ den Fehler nicht moniert.
-
hmmm...ich weiss ja nicht, welche Auflage du vom Buch hast, aber ich hab gerade nachgeschaut und meine scheint recht OK zu sein. Dort steht auf Seite 533:
// ... Mammal* ptr =0; // Fehler von Ape64 // ... case 1: pFunc = Mammal::Speak; break; // Fehler im Buch