C ++에서 헤더 파일에 선언하여 소스 파일에 정적 메소드 정의 IC_Utility { public:

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함수 정의 가 필요하지 않습니다


답변

정적 멤버 함수는 해당 클래스의 정적 변수를 참조해야합니다. 당신의 경우에는

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

당신의 멤버 함수 때문에 CP_StringToPstring정적은 그 함수의 매개 변수 inString와는 outString너무 정적으로 선언해야합니다.

정적 멤버 함수는 작업중 인 객체를 참조하지 않지만 선언 된 변수는 현재 객체를 참조하므로 오류를 반환합니다.

멤버 함수에서 정적을 제거하거나 멤버 함수에 사용한 매개 변수를 정적으로 선언하면서 정적을 추가 할 수 있습니다.


답변