Fehler bei der Adresse der eingeklammerten Elementfunktion
Fand ich etwas Interessantes. Die Fehlermeldung sagt alles. Was ist der Grund hinter, der nicht erlaubt Klammern während der Einnahme der Adresse eines nicht-statische member-Funktion? Ich habe es kompiliert on-gcc 4.3.4.
#include <iostream>
class myfoo{
public:
int foo(int number){
return (number*10);
}
};
int main (int argc, char * const argv[]) {
int (myfoo::*fPtr)(int) = NULL;
fPtr = &(myfoo::foo); //main.cpp:14
return 0;
}
Fehler: main.cpp:14: Fehler: ISO-C++ verbietet das die Adresse einer nicht qualifizierten oder Klammern eingeschlossene nicht-statische member-Funktion zu bilden, die einen Zeiger auf member-Funktion. Sagen, '&myfoo::foo'
InformationsquelleAutor der Frage Mahesh | 2011-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Fehlermeldung, es sieht aus wie Sie sind nicht erlaubt zu nehmen, die Adresse des eingeklammerten Ausdrucks. Es ist darauf hindeutet, dass Sie umschreiben
zu
Dies ist durch einen Teil der spec (§5.3.1/3) liest
(meine Betonung). Ich bin mir nicht sicher, warum dies ist in der Regel (und ich wollte eigentlich nicht dieses wissen bis jetzt), aber das scheint das zu sein, was der compiler beschweren.
Hoffe, das hilft!
InformationsquelleAutor der Antwort templatetypedef
Vorstellen, dass dieser code:
Ohne den trick mit den Klammern, die Sie nicht in der Lage, einen Zeiger direkt an B ' s Daten-member (Sie müssten die Basis-Klasse wirft und Spiele mit
this
- nicht schön).Vom ARM:
Den IST einfach gehalten, diese pre-Standard-Konzept und ausdrücklich erwähnt, dass die Klammern machen es so, dass Sie nicht bekommen, einen Zeiger auf member.
InformationsquelleAutor der Antwort Johannes Schaub - litb