我正在尝试在我的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
}
答案 0 :(得分:2)
您有一个typedef声明为struct sp_session
,但struct sp_session
是一个不完整的类型。为了使QMainWindow
类具有sp_session
成员,类型必须是完整的(即,您需要一个声明来定义成员struct sp_session
具有的成员)。
如果无法做到这一点,您可以重新构建内容,以便class QMainWindow
成为sp_struct*
或sp_struct&
成员。
答案 1 :(得分:0)
原来我确实打算sp_session * spSession
!