为啥 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_session
但 struct sp_session
是一个不完整的类型。为了让QMainWindow
类拥有sp_session
成员,类型必须是完整的(即,您需要一个同时定义struct sp_session
成员的声明)。
如果无法做到这一点,您或许可以重组事物,让class QMainWindow
拥有sp_struct*
或sp_struct&
作为成员。
【讨论】:
谢谢!原来我其实是想定义sp_session * spSession
【参考方案2】:
原来我的意思是sp_session * spSession
!
【讨论】:
以上是关于为啥 Qt Creator 找到 typedef,但没有找到构建过程?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我用小写字母命名小部件类后,qt-creator 无法构建?