我正在使用C ++语言开发OpenFrameworks的应用程序。 在我的程序中有一行生成动态转换指针
Ref_<ImageUniform> p = o.cast<ImageUniform>();
这是实现cast()函数实现的类
template <typename T>
struct Ref_ : public ofPtr<T>
{
Ref_() {}
Ref_(T *t) : ofPtr<T>(t) {}
Ref_(const Ref_<T>& o) : ofPtr<T>(o) {}
Ref_(const ofPtr<T>& o) : ofPtr<T>(o) {}
template <typename TT>
Ref_<TT> cast() const { return dynamic_pointer_cast<TT>(*this); }
};
当我在没有-std = c ++ 11的情况下进行编译时,它可以工作。 但是,当我放入-std = c ++ 11时,它会打印出一个编译错误,并在此第191行将我引用到OpenFrameworks库的内部文件“ofTypes.h”:
#else
template<typename Tp1>
ofPtr(const ofPtr<Tp1>& __r, std::__dynamic_cast_tag)
: std::shared_ptr<T>(__r, std::__dynamic_cast_tag()) { }
#endif
这也是编译错误
...... \ libs \ openFrameworks \ types \ ofTypes.h | 193 |错误:没有匹配函数&gt;用于调用'std :: shared_ptr :: shared_ptr(const&gt; ofPtr&amp;,std :: TR1 :: __ dynamic_cast_tag)“| #其他 模板 ofPtr(const ofPtr&amp; __r,std :: __ dynamic_cast_tag) :std :: shared_ptr(__ r,std :: __ dynamic_cast_tag()){} #ENDIF
答案 0 :(得分:1)
您应该更新您的OpenFrameworks版本(支持C ++ 11),或者不应该使用C ++ 11编译当前代码。
现在您遇到以下代码
的问题 template<typename Tp1>
ofPtr(const ofPtr<Tp1>& __r, std::__dynamic_cast_tag)
: std::shared_ptr<T>(__r, std::__dynamic_cast_tag()) { }
当您在没有C ++ 11的情况下编译此代码时,shared_ptr
的实现取自tr1/memory
标头。可以编译代码,因为shared_ptr
ctor的版本作为第二个参数__dynamic_cast_tag
。当您尝试使用C ++ 11编译代码时,您将收到错误,因为shared_ptr
实现取自memory
标头(其中没有shared_ptr的ctor,其中__dynamic_cast_tag
为第二个参数)。