我有两个项目,一个是样本(编译时没有错误),看起来像这样(前几行只显示):
#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;
我错过了什么吗?我很确定我像以前一样包含了正确的头文件,甚至尝试使用完全限定的命名空间但编译器仍然没有找到定义?
答案 0 :(得分:0)
您是否尝试使用::ci::qtime
而非简单ci::qtime
来引用全局命名空间?这不应该有所作为,但有时候C ++编译器会绊倒这些东西。