我有两个项目,一个是示例(编译时没有错误),看起来像这样(仅显示前几行):
工作示例
#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),尝试做类似的事情 - 再次提取:
在项目中使用
#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
在第一个示例中使用完整的限定名,它编译得很好(如预期的那样)。
这到底是怎么回事?为什么“在项目中使用”版本会引发编译器错误:命名空间 'cinder' 中没有名为 'qtime' 的成员?
为清楚起见,QuickTimeGl.h 文件又包含另一个文件,该文件明确声明了命名空间和类型 def:
namespace cinder { namespace qtime {
typedef std::shared_ptr<class MovieGl> MovieGlRef;
我错过了什么吗?我很确定我像以前一样包含了正确的头文件,甚至尝试使用完全限定的命名空间,但编译器仍然找不到定义?