Не был объявлен в этой области с дружеской функцией

StackOverflow https://stackoverflow.com//questions/10693854

  •  12-12-2019
  •  | 
  •  

Вопрос

Я не уверен, что это происходит, но кажется, что он бросает «не было объявлено в этой области» ошибки, ложно. Я говорю это, потому что он работает на моем компьютере Windows (MSVC Compiler), но он не будет работать на моем Mac (GCC). Я использую Qt Creator, чтобы написать это. Вот моя ситуация:

Это бросает ошибку на моем кнопке кнопки ...

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

Кроме того, и интересное, что если я щелкнул его в заголовке, и нажмите «Следуйся символом под курсором», он не может найти его ... Другое дело, держите в виду, что это работает на моих окнах компьютер.

Это было полезно?

Решение

Декларации друзей не действуют как полное объявление функции.

Вам нужно иметь отдельное объявление для XDBFCreate.

Другие советы

Функция, которая объявляется только как друга, не объявлена только с отдельным декларированием пространства имен, доступна только путем зависимого от аргумента.Ваш вызов XDBFcreate не включает в себя аргумент типа XDBF, чтобы функцию друга, объявленной в этом классе, не найден по имени поиска.

Для исправления кода добавьте декларацию области имен-пространства-пространства для XDBFcreate перед объявлением XDBF

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top