Ich habe ein kleines Problem mit statischen Methoden in C ++
Beispiel .h:
class IC_Utility {
public:
IC_Utility();
~IC_Utility();
std::string CP_PStringToString( const unsigned char *outString );
void CP_StringToPString( std::string& inString, unsigned char *outString, short inMaxLength );
static void CP_StringToPString( std::string& inString, unsigned char *outString);
void CP_StringToPString( FxString& inString, FxUChar *outString);
};
Beispiel .cpp:
static void IC_Utility::CP_StringToPString(std::string& inString, unsigned char *outString)
{
short length = inString.length();
if( outString != NULL )
{
if( length >= 1 )
CPLAT::CP_Utility::CP_CopyMemory( inString.c_str(), &outString[ 1 ], length );
outString[ 0 ] = length;
}
}
Ich wollte einen Anruf tätigen wie:
IC_Utility::CP_StringToPString(directoryNameString, directoryName );
Aber ich bekomme eine Fehlermeldung:
error: cannot declare member function 'static void IC_Utility::CP_StringToPString(std::string&, unsigned char*)' to have static linkage
Ich verstehe nicht, warum ich das nicht kann. Kann mir jemand helfen zu verstehen, warum und wie ich das erreichen kann, was ich will?
c++
static-linking
ABV
quelle
quelle
static
Schlüsselwort in der CPP-Datei entfernen . C ++ erlaubt es nicht./* static */
. Ich mag die gleichen Modifikatoren und Standardargumente in den .h- und .cpp-Dateien.static
In der Header-Datei behalten.h
, bedeutet "an Klasse angehängt, nicht an ein Objekt",static
in der.cpp
Datei entfernen , es hat eine andere Bedeutung, die Sie hier nicht wollen.Antworten:
Entfernen Sie das
static
Schlüsselwort in der Methodendefinition. Behalten Sie es einfach in Ihrer Klassendefinition.static
Schlüsselwort in der CPP-Datei bedeutet, dass eine bestimmte Funktion eine statische Verknüpfung hat, dh. Es ist nur über andere Funktionen in derselben Datei zugänglich.quelle
static
in der Methodendefinition würde bedeuten, dass nur andere Methoden in dieser Klasse auf diese statische Methode zugreifen können, keine anderen Methoden außerhalb dieser Klasse.static
in .cpp-Dateien dient nur der Abwärtskompatibilität mit C.Schlüsselwörter
static
undvirtual
sollten in der Definition nicht wiederholt werden. Sie sollten nur in der Klassendeklaration verwendet werden.quelle
Sie müssen nicht
static
in der Funktionsdefinition habenquelle
Statische Elementfunktionen müssen sich auf statische Variablen dieser Klasse beziehen. Also in deinem Fall,
Da Ihr Funktionselement
CP_StringToPstring
statisch ist, die Parameter in dieser FunktioninString
undoutString
sollen auch als statisch deklariert werden.Die statischen Elementfunktionen beziehen sich nicht auf das Objekt, an dem gearbeitet wird, sondern die von Ihnen deklarierten Variablen beziehen sich auf das aktuelle Objekt, sodass ein Fehler zurückgegeben wird.
Sie können entweder die Statik aus der Elementfunktion entfernen oder Statik hinzufügen, während Sie die Parameter, die Sie für die Elementfunktion verwendet haben, ebenfalls als statisch deklarieren.
quelle