私は2つのプロジェクトを持っています.1つはサンプル(エラーなしでコンパイルされます)で、次のようになります(最初の数行のみが表示されます):
実施例
#include "cinder/app/App.h"
#include "cinder/app/RendererGl.h"
#include "cinder/Surface.h"
#include "cinder/gl/gl.h"
#include "cinder/gl/Texture.h"
#include "cinder/Rand.h"
#include "cinder/qtime/QuickTimeGl.h"
using namespace ci;
using namespace ci::app;
using namespace std;
class QTimeAdvApp : public App {
public:
void prepareSettings( Settings *settings );
void setup();
void keyDown( KeyEvent event );
void fileDrop( FileDropEvent event );
void update();
void draw();
void addActiveMovie( qtime::MovieGlRef movie );
void loadMovieUrl( const std::string &urlString );
void loadMovieFile( const fs::path &path );
};
特に次の行に注意してください。void addActiveMovie( qtime::MovieGlRef movie );
同じライブラリ (LibCinder 内の Quicktime OpenGL) を使用する必要があるもう 1 つのプロジェクトは、同様のことを試みています。
プロジェクトで使用
#pragma once
#include "AbstractContent.h"
#include "cinder/gl/Texture.h"
#include "cinder/Tween.h"
#include "AbstractTransition.h"
#include "cinder/qtime/QuickTimeGl.h"
namespace TH {
class VideoContent : public AbstractContent {
public:
VideoContent();
~VideoContent();
virtual void setup();
void loadMovie(ci::Url url);
void loadLocalMovie(ci::fs::path path);
void setPreloadedMovie(ci::qtime::MovieGlRef movie);
これはコンパイラ エラーをスローします:名前空間 'cinder' に 'qtime' という名前のメンバーはありません
実際void setPreloadedMovie(ci::qtime::MovieGlRef movie);
、最初の例では完全修飾名を使用でき、ci:qtime:MovieGlRef
(期待どおり) 正常にコンパイルされます。
ここで何が起こっているのですか?"Use in Project" バージョンがコンパイラ エラーをスローするのはなぜですか:名前空間 'cinder' に 'qtime' という名前のメンバーがありません。
わかりやすくするために、QuickTimeGl.h ファイルには、名前空間と型 def を明確に宣言する別のファイルが含まれています。
namespace cinder { namespace qtime {
typedef std::shared_ptr<class MovieGl> MovieGlRef;
何か不足していますか?以前と同じように、正しいヘッダー ファイルをインクルードしていると確信しており、完全修飾名前空間を使用しようとしても、コンパイラは定義を見つけられませんか?