为啥 Qt Creator 找到 typedef,但没有找到构建过程?

Posted

技术标签:

【中文标题】为啥 Qt Creator 找到 typedef,但没有找到构建过程?【英文标题】:Why does Qt Creator find the typedef, but not the build process?为什么 Qt Creator 找到 typedef,但没有找到构建过程? 【发布时间】:2012-10-06 04:50:12 【问题描述】:

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

【问题讨论】:

不能说这是问题所在,但由于 libspotify 看起来像一个 C 库,因此可能需要在 include 周围加上 'extern "C" '。 【参考方案1】:

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

如果无法做到这一点,您或许可以重组事物,让class QMainWindow 拥有sp_struct*sp_struct&amp; 作为成员。

【讨论】:

谢谢!原来我其实是想定义sp_session * spSession【参考方案2】:

原来我的意思是sp_session * spSession

【讨论】:

以上是关于为啥 Qt Creator 找到 typedef,但没有找到构建过程?的主要内容,如果未能解决你的问题,请参考以下文章

Qt Creator 中的 Glew 链接问题?

Qt Creator Theme FlatDark 配色

为啥我用小写字母命名小部件类后,qt-creator 无法构建?

为啥 Qt creator 中不存在所有 android 权限?

为啥 Qt Creator 在我的所有文件上运行 MOC?

为啥 Qt Creator 3.0.0 欢迎模式在 VM 中不起作用?