web-dev-qa-db-de.com

Statische Methoden in C ++

Ich habe ein wenig Probleme bei der Arbeit 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 telefonieren wie:

IC_Utility::CP_StringToPString(directoryNameString, directoryName );

Aber ich bekomme einen Fehler:

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 erreiche, was ich will?

132
ABV

Entfernen Sie das Schlüsselwort static in der Methodendefinition. Behalten Sie es einfach in Ihrer Klassendefinition.

static Schlüsselwort in CPP-Datei bedeutet, dass eine bestimmte Funktion eine statische Verknüpfung hat, dh. Auf sie kann nur von anderen Funktionen in derselben Datei zugegriffen werden.

213
x13n

Die Schlüsselwörter static und virtual sollten in der Definition nicht wiederholt werden. Sie sollten nur in der Klassendeklaration verwendet werden.

39
Bo Persson

Sie müssen static nicht in der Funktionsdefinition haben

11
cpx