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)。

それが不可能な場合は、代わりにメンバーとしてorをclass QMainWindow持つように再構築できる場合があります。sp_struct*sp_struct&

于 2012-10-06T05:22:48.160 に答える
0

私が実際にそうするつもりだったことが判明しましたsp_session * spSession

于 2012-10-06T05:55:01.930 に答える