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: エラー: 'XDBFcreate' はこのスコープで宣言されていません

ファイルの先頭に次のものが含まれているため、デカールが付けられていることはほぼ確実です。

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

「xdbf.h」は宣言されている場所です...これが私のXDBFヘッダーファイルの一部です:

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

また、興味深いのは、ヘッダーで右クリックして「カーソルの下のシンボルをたどる」をクリックしても見つからないことです...もう1つのことは、これが私のWindowsコンピューターで機能することを覚えておいてください.

4

2 に答える 2

1

フレンド宣言は、完全な関数宣言として機能しません。

XDBFcreate には別の宣言が必要です。

于 2012-05-21T23:31:46.400 に答える
1

フレンドとしてのみ宣言され、別の名前空間スコープ宣言で宣言されていない関数は、引数依存ルックアップによってのみ検索できます。への呼び出しにXDBFcreateは型の引数が含まれていないXDBFため、そのクラスで宣言されているフレンド関数は名前検索では見つかりません。

XDBFcreateコードを修正するには、宣言の前に名前空間スコープの宣言を追加しますXDBF

于 2012-05-22T00:25:14.097 に答える