C++中的静态方法

ABV*_*ABV 136 c++ static-linking

我在使用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);

};
Run Code Online (Sandbox Code Playgroud)

示例.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想拨打电话:

IC_Utility::CP_StringToPString(directoryNameString, directoryName );
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

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

我不明白为什么我不能这样做.任何人都可以帮助我理解为什么以及如何实现我想要的东西?

x13*_*13n 219

删除static方法定义中的关键字.将它保存在类定义中.

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

  • 不是其他类方法,而是.cpp文件中的其他函数.不管怎么说,你不应该用C++做这件事.如果您希望C++函数具有内部链接,则应考虑将其放在某个匿名命名空间中.在.cpp文件中使用`static`只是为了向后兼容C. (13认同)

Bo *_*son 40

关键词staticvirtual不应在定义中重复.它们只应在类声明中使用.


cpx*_*cpx 11

您不需要具有static函数定义