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

另外,有趣的是,如果我在标题中右键单击它,然后单击“跟随光标下的符号”,它就找不到它...另一件事是,请记住,这适用于我的 Windows 计算机。

4

2 回答 2

1

友元声明不作为完整的函数声明。

您需要为 XDBFcreate 单独声明。

于 2012-05-21T23:31:46.400 回答
1

仅声明为友元的函数,未使用单独的命名空间范围声明进行声明,只能通过 Argument-Dependent Lookup 找到。您的调用XDBFcreate不涉及类型参数,XDBF因此在该类中声明的友元函数无法通过名称查找找到。

XDBFcreate要修复代码,请在声明之前添加一个命名空间范围声明XDBF

于 2012-05-22T00:25:14.097 回答