2017-06-21 2 views
-3

Ich habe ein classWie unterscheidet man Zeiger zu überladenen Funktionen?

struct MyClass 
{ 
    ... 
    bool (* IsValid)(MyClass * self, int type); 
    bool (* IsValid)(MyClass * self, char * str); 
}; 

relevanten Funktionen

bool IsValidMyClass(BitMask * self, int mask) 
{ 
    ... 
} 
bool IsValidMyClass(BitMask * self, char * str) 
{ 
    ... 
} 

und eine CTOR -ähnliche Funktion

MyClass BuildMyClass() 
{ 
    res.IsValid = IsValidMyClass; //(MyClass * self, int type); 
    res.IsValid = IsValidMyClass; //(MyClass * self, char * str); 
    return res; 
} 

Und hier habe ich in confuse bekam - wie sagt man Compiler eine tun richtige Zuordnung?

+1

, die nicht kompiliert werden, da Sie nicht zwei Mitglieder einer Struktur mit dem gleichen Namen in C –

+1

Es gibt keine überladenen Funktionen in C 'BitMask & self' keine gültige C-Deklaration haben. Vielleicht studierst du die falsche Sprache. –

+1

Dies ist offensichtlich C++. Sie müssen das Tag ändern. – HolyBlackCat

Antwort

2

Überladene Funktionen sind in C nicht erlaubt. Sie dürfen auch nicht zwei Mitglieder einer struct mit dem gleichen Namen haben.

Sie müssen ihnen jeweils unterschiedliche Namen geben. Außerdem gibt es in C keinen Referenzoperator &. Wahrscheinlich möchten Sie einen Zeiger übergeben.

struct MyClass 
{ 
    ... 
    bool (* IsValidByType)(MyClass *self, int type); 
    bool (* IsValidByStr)(MyClass *self, char * str); 
}; 

bool IsValidMyClassByType(BitMask *self, int mask) 
{ 
    ... 
} 
bool IsValidMyClassByStr(BitMask *self, char * str) 
{ 
    ... 
} 

MyClass BuildMyClass() 
{ 
    res.IsValidByType = IsValidMyClassByType; 
    res.IsValidByStr = IsValidMyClassByStr; 
    return res; 
} 
0

C++ übernahm die Funktionszeiger-Syntax von C. Mit virtuellen Membern von Klassen, die im Wesentlichen dasselbe tun wie ein Funktionszeiger, benötigen Sie jedoch in C++ selten C-Style-Funktionszeiger.

Wenn Sie eine überladene Funktion haben, wird C++ aufgelöst, indem die Typen in der Argumentliste des Funktionszeigers abgeglichen werden.

Verwandte Themen