variable usar poo metodos locales globales estaticos estaticas cuando atributo c++ static-linking

c++ - usar - variable static java



Métodos estáticos en C++ (4)

Eliminar static palabra clave static en la definición del método. Mantenlo solo en tu definición de clase.

palabra clave static colocada en el archivo .cpp significa que cierta función tiene un enlace estático, es decir. solo es accesible desde otras funciones en el mismo archivo.

Tengo problemas para trabajar con métodos estáticos en C ++

Ejemplo .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); };

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

Quería hacer una llamada como:

IC_Utility::CP_StringToPString(directoryNameString, directoryName );

Pero me sale un error:

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

No entiendo por qué no puedo hacer esto. ¿Alguien puede ayudarme a entender por qué y cómo lograr lo que quiero?


Las funciones de miembro estático deben hacer referencia a variables estáticas de esa clase. Entonces en tu caso,

static void CP_StringToPString( std::string& inString, unsigned char *outString);

Como su función miembro CP_StringToPstring es estática, los parámetros en esa función, inString y outString deben declararse como estáticos.

Las funciones miembro estáticas no se refieren al objeto en el que está trabajando, pero las variables que declara se refieren a su objeto actual para que devuelva el error.

Puede eliminar la función estática de la función miembro o agregar estática al declarar que los parámetros que utilizó para la función miembro también son estáticos.


Las palabras clave static y virtual no deberían repetirse en la definición. Solo deben usarse en la declaración de clase.


No necesita tener static en la definición de la función