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