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?
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.
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.
Vous n'avez pas besoin d'avoir static
dans la définition de fonction