web-dev-qa-db-fra.com

Méthodes statiques en C ++

J'ai un peu de mal à travailler avec des méthodes statiques en C++

Exemple .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);

};

Exemple .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;
    }
}

Je voulais faire un appel comme:

IC_Utility::CP_StringToPString(directoryNameString, directoryName );

Mais je reçois une erreur:

error: cannot declare member function 'static void IC_Utility::CP_StringToPString(std::string&, unsigned char*)' to have static linkage

Je ne comprends pas pourquoi je ne peux pas faire ça. Quelqu'un peut-il m'aider à comprendre pourquoi et comment réaliser ce que je veux?

132
ABV

Supprimez le mot clé static dans la définition de la méthode. Gardez-le juste dans votre définition de classe.

static mot clé placé dans le fichier .cpp signifie qu'une fonction donnée a un lien statique, c'est-à-dire. il est accessible uniquement à partir d'autres fonctions du même fichier.

213
x13n

Les mots-clés static et virtual ne doivent pas être répétés dans la définition. Ils ne doivent être utilisés que dans la déclaration de classe.

39
Bo Persson

Vous n'avez pas besoin d'avoir static dans la définition de fonction

11
cpx