我不确定为什么会发生这种情况,但似乎是错误地抛出“未在此范围内声明”错误。我说这是因为它适用于我的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上有效计算机。
答案 0 :(得分:1)
朋友声明不作为完整的功能声明。
您需要为XDBFcreate单独声明。
答案 1 :(得分:1)
只能声明为朋友的函数,不能使用单独的命名空间范围声明声明,只能通过Argument-Dependent Lookup查找。您对XDBFcreate
的调用不涉及XDBF
类型的参数,因此通过名称查找找不到该类中声明的友元函数。
要修复代码,请在声明XDBFcreate
之前添加XDBF
的命名空间范围声明