2012-05-21 2 views
0

왜 이런 일이 발생하는지 잘 모르겠습니다 만, "이 범위에서 선언되지 않았습니다."라는 오류가 발생했습니다. 내 Windows 컴퓨터 (MSVC 컴파일러)에서 작동하기 때문에 이것을 말하지만 Mac (GCC)에서는 작동하지 않습니다. 나는 이것을 작성하기 위해 Qt Creator를 사용하고있다. 여기 내 상황 :Friendly Function으로이 범위에서 선언되지 않았습니다.

그것은 내 pushButtonClicked에 오류가 발생합니다 ...

void NewGpdDialog::on_pushButton_clicked() 
{ 
    *xdbf = XDBFcreate(filePath.toStdString(), Achievement, ba.data(), ba.size(), &str); 
} 

가 발생 정확한 오류는 다음과 같습니다

.../newgpddialog.cpp:63: error: 'XDBFcreate' was not declared in this scope

난에 있기 때문에, 그것은 decalared 거의 긍정적이다 내 파일의 맨 위에는 다음이 포함됩니다.

"xdbf.h"는 선언 된 곳입니다. 여기 내 XDBF hea의 일부입니다 데르 파일 :

class XDBF 
{ 
public: 
    XDBF(string path); 
    ~XDBF(); 

    ... 

    static std::string FILETIME_to_string(FILETIME *pft); 
    friend XDBF* XDBFcreate(string filePath, GPD_Type type, char *imageData = NULL, size_t imageDataLen = 0, wstring *gameName = NULL); 

지금 내 "xdbf.cpp"이 같은 파일에 있습니다 또한

XDBF* XDBFcreate(string filePath, GPD_Type type, char *imageData, size_t imageDataLen, wstring *gameName) 
{ 
    ... 
} 

, 그리고 재미있는 것은 내가 바로 헤더를 클릭하고 클릭 할 경우이다 "Symbol Under Cursor"를 찾으면 찾을 수 없습니다 ... 또 다른 것은 Windows 컴퓨터에서 작동한다는 것입니다.

+0

의 선언 앞에 XDBFcreate의 이름 공간 범위 선언을 추가 수정하려면'XDBFcreate'는 정적 방법이 될 것 같지 않습니다. – BeMFi

답변

1

친구 선언은 전체 기능 선언으로 작동하지 않습니다.

XDBF 작성을 위해 별도의 선언이 필요합니다.

1

별도의 네임 스페이스 범위 선언으로 선언되지 않은 친구로만 선언 된 함수는 인수 의존적 조회에서만 찾을 수 있습니다. XDBFcreate에 대한 호출에는 XDBF 유형의 인수가 포함되지 않으므로 해당 클래스에서 선언 된 friend 함수가 이름 조회에 의해 발견되지 않습니다.

내가 틀리지 않는 코드가 XDBF

관련 문제