2012-05-21 30 views
0

這個範圍內聲明我不知道爲什麼會發生這種情況,但它似乎是拋出「未在此範圍內聲明」的錯誤,錯誤地。我這樣說是因爲它適用於我的Windows計算機(MSVC編譯器),但它在我的Mac(GCC)上不起作用。我正在使用Qt Creator編寫此代碼。這裏是我的情況:沒有在友好函數

它引發錯誤在我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,因爲我的文件的頂部我包括:

#include "newgpddialog.h" 
#include "ui_newgpddialog.h" 
#include "xdbf.h" 
#include <QDesktopServices> 
#include <QBuffer> 
#include <QFileDialog> 
#include <QMessageBox> 

「xdbf.h」是它聲明的地方...這是我的XDBF hea的一部分DER文件:

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) 
{ 
    ... 
} 

而且,和有趣的事情是,如果我右鍵單擊它的標題,單擊「遵循光標下的符號」,它無法找到它...另一件事,請記住,這在我的Windows計算機上工作。

+0

聲明之前除非我記錯了'XDBFcreate'似乎並沒有成爲一個靜態方法。 – BeMFi

回答

1

朋友聲明不作爲一個完整的函數聲明。

您需要爲XDBFcreate單獨聲明。

1

只能聲明爲朋友的函數,不能用單獨的名稱空間範圍聲明聲明,只能通過參數相關查找找到。您致電XDBFcreate不涉及XDBF類型的參數,因此在該類中聲明的朋友函數不是通過名稱查找找到的。

修復代碼添加XDBFcreate一個命名空間範圍內聲明的XDBF