未在此范围内声明友好功能

时间:2012-05-21 23:18:31

标签: c++ qt function declare

我不确定为什么会发生这种情况,但似乎是错误地抛出“未在此范围内声明”错误。我说这是因为它适用于我的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'

我几乎肯定它是decalared,因为在我的文件顶部我包括:

#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上有效计算机。

2 个答案:

答案 0 :(得分:1)

朋友声明不作为完整的功能声明。

您需要为XDBFcreate单独声明。

答案 1 :(得分:1)

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

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

相关问题