2

我正在尝试在我的 Qt Creator 项目中使用外部库。我在 Windows 上使用 Visual C++ 构建它。

我将此添加到我的 qmake 文件中:

# Include libspotify
INCLUDEPATH += C:\\libspotify\\include
LIBS     += -LC:\\libspotify\\lib -llibspotify

然后我去使用库中的一些 typedef 结构:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <libspotify/api.h>

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    sp_session_config spConfig;
    sp_session spSession;
};

#endif // MAINWINDOW_H

现在在 IDE 编辑器中,语法高亮将 sp_session_config 和 sp_session 标记为紫色,表示编辑器可以很好地找到这些 typedef(如果它没有找到定义,它将使文本变为黑色)。

但是当我构建时,我得到了这个:

mainwindow.h:32: error: C2079: 'MainWindow::spSession' uses undefined struct 'sp_session'

现在我知道编译器正在查找 api.h 文件,因为如果我将其更改为虚假文件名,它会吐出一个未找到文件的错误。

我究竟做错了什么?

编辑:头文件定义这样的结构:

extern "C" {
typedef struct sp_session sp_session; ///< Representation of a session
}
4

2 回答 2

2

您有一个 typedef 的声明,struct sp_sessionstruct sp_session它是一个不完整的类型。为了让QMainWindow类拥有一个sp_session成员,类型必须是完整的(即,您需要一个还定义成员struct sp_session拥有什么的声明)。

如果这是不可能的,您也许可以重组事物,以便改为class QMainWindow具有sp_struct*sp_struct&作为成员。

于 2012-10-06T05:22:48.160 回答
0

原来我真的是故意的sp_session * spSession

于 2012-10-06T05:55:01.930 回答