Ich versuche, eine Nachschlagetabelle der Elementfunktionen in meinem Code zu erstellen, aber es scheint zu versuchen, meinen Kopierkonstruktor aufzurufen, den ich blockiert habe, indem ich eine "nicht kopierbare" Klasse erweitert habe. Was ich habe, ist etwas wie das Folgende.Memberfunktionszeiger ruft Kopierkonstruktor auf?
enum {FUN1_IDX, FUN2_IDX, ..., NUM_FUNS };
class Foo {
fun1(Bar b){ ... }
fun2(Bar b){ ... }
...
void (Foo::*lookup_table[NUM_FUNS])(Bar b);
Foo(){
lookup_table[FUN1_IDX] = &Foo::fun1;
lookup_table[FUN2_IDX] = &Foo::fun2;
}
void doLookup(int fun_num, Bar b) {
(this->*lookup_table[fun_num])(b);
}
};
Der Fehler ist, dass die ‚(this -> ...‘ Zeile versucht, den Copy-Konstruktor aufzurufen, die nicht sichtbar ist, warum es versucht, dies zu tun, und was habe ich so zu ändern. es wird nicht?
Konnten Sie die exakte Fehlermeldung posten, die Sie sehen? –
Sprechen Sie über den Foo-Kopierkonstruktor oder den Bar-Kopierkonstruktor? Wenn die Bar, dann ist dies ein wirklich grundlegendes Problem (unten von litb beantwortet). Wenn das Foo, dann poste bitte ein kompilierbares Codebeispiel, weil, als ich die ... s ausfüllte und Foo von einer nicht kopierbaren Klasse erbte, funktionierte das gut. –