在源文件中定义静态方法,在 C + + 中在头文件中声明静态方法

我在使用 C + + 中的静态方法时遇到了一点麻烦

例子 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);


};

示例.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;
}
}

我想打个电话:

IC_Utility::CP_StringToPString(directoryNameString, directoryName );

但我得到了一个错误:

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

我不明白为什么我不能这样做。有人能帮我理解为什么以及如何实现我想要的吗?

220291 次浏览

删除方法定义中的 static关键字。将其保留在类定义中。

放入 static关键字。Cpp 文件意味着某个函数具有静态链接,即。它只能从同一文件中的其他函数访问。

在函数定义中不需要使用 static

关键字 staticvirtual不应该在定义中重复。它们只应该在类声明中使用。

静态成员函数必须引用该类的静态变量,

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

因为您的成员函数 CP_StringToPstring是静态的,所以该函数中的参数 inStringoutString也应该声明为静态的。

静态成员函数不引用它正在处理的对象,但是您声明的变量引用它的当前对象,因此它返回错误。

您可以从成员函数中删除静态,也可以在将用于成员函数的参数声明为静态时添加静态。

也许最好的做法是“像 stdlib 那样做”。也就是: 全部内联,全部标题。

// in the header
namespase my_namespace {


class my_standard_named_class final {
public:
static void standard_declared_defined_method () {
// even the comment is standard
}
} ;


} // namespase my_namespace


就这么简单。