为什么Qt Creator会找到typedef,而不是构建过程?

时间:2012-10-06 04:50:12

标签: c++ qt visual-c++

我正在尝试在我的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
}

2 个答案:

答案 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