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

Define static method in source-file with declaration in header-file in C++

本文关键字:文件 C++ 声明 源文件 定义 静态方法 并在      更新时间:2023-10-16

我在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

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

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

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

关键字

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

不需要在函数定义中具有static

也许最好的做法是"像 std lib 那样做"。即:全部内联,全部在标头中。

// 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 

就这么简单...

静态成员函数必须引用该类的静态变量。所以在你的情况下,

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

由于成员函数CP_StringToPstring是静态的,因此该函数、inStringoutString 中的参数也应声明为静态。

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

您可以从成员函数

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