000
28.11.2008, 14:47 Uhr
dafduf
|
Huhu zusammen, da bin ich mal wieder mit meinen Problemen und hoffe auf Euro Unterstützung und Ratschläge.
Folgender Quellcode:
C++: |
#include <iostream>
typedef void (*Funktionspointer)(std::string,int);
void ausgabe1(std::string name,int zahl) { std::cout<<"ausgabe1 ="<<name<<zahl<<std::endl; }
void ausgabe2(std::string name,int zahl) { std::cout<<"ausgabe2 ="<<name<<zahl<<std::endl; }
int main(void) { Funktionspointer meinfunktionspointer[2]; int phase; phase=1; meinfunktionspointer[0]=ausgabe1; meinfunktionspointer[1]=ausgabe2; for (int i=0;i<=100;i++) { meinfunktionspointer[phase-1]("eins",1); if (phase==2) phase=1; else phase++; }
std::cout<<"ENDE"<<std::endl; return 0; }
|
Hier klappt die Zuweisung der Funktionen an die entsprechenden Pointer im Array.
Nun möcht ich das ganze in eine Klasse packen. Dazu der folgende Code:
C++: |
#include <iostream>
typedef void (*Funktionspointer)(std::string,int);
class Meineklasse { private: Funktionspointer meinfunktionspointerarray[2]; public: Meineklasse() { meinfunktionspointerarray[0]=ausgabe1; meinfunktionspointerarray[1]=ausgabe2; } void ausgabe1(std::string name,int zahl) { std::cout<<"ausgabe1 ="<<name<<zahl<<std::endl; } void ausgabe2(std::string name,int zahl) { std::cout<<"ausgabe2 ="<<name<<zahl<<std::endl; } virtual ~Meineklasse(){} };
int main(void) { Meineklasse* meinobjekt=new Meineklasse(); delete meinobjekt;
std::cout<<"ENDE"<<std::endl; return 0; }
|
Tja und nun meckert der Compiler mit folgendem Hinweis:
../main.cpp: In constructor `Meineklasse::Meineklasse()':
../main.cpp:12: Fehler: Argument des Typs »void (Meineklasse:(std::string, int)« passt nicht zu »void (*)(std::string, int)«
../main.cpp:13: Fehler: Argument des Typs »void (Meineklasse:(std::string, int)« passt nicht zu »void (*)(std::string, int)«
Mir ist nicht klar, wieso auf einmal die nicht mehr zueinanderpassen. Ziel ist es in einem aufwendigeren Programm dem Array mit den Funktionspointern, erst während der Erstellung eines Objektes dieser Klasse die entsprechenden Funktionen in das Array einzusortieren, bzw den Pointern zuzuweisen, also während der Konstruktor der Klasse aufgerufen wird.
Wäre super, wenn ihr mir erklären könntet, was da schief läuft und wie es richtig geht.Vielen Dank im Voraus.
Grüße, dafduf. |