命名空间中没有名为'dynamic_cast_tag'的成员 boost::d etail (SALOME 7.3.0)



我正试图在OSX Mavericks(Darwin 13.0.0)上编译SALOME 7.3.0,并安装了boost 1.55(使用自制软件)。GCC在试图定义模板函数时阻塞了SALOME(SRC/DF)中的一个工具包函数,错误为:

In file included from /Users/dingram/Developer/SALOME/KERNEL_SRC_7.3.0/src/DF/DF_Attribute.cxx:20:
/Users/dingram/Developer/SALOME/KERNEL_SRC_7.3.0/src/DF/DF_definitions.hxx:50:44: error: no member named 'dynamic_cast_tag' in namespace
'boost::detail'
boost::shared_ptr<T>(r,boost::detail::dynamic_cast_tag())
^

代码片段是

#include <iostream>
#include <stdio.h>
#include <boost/shared_ptr.hpp>
template<class T> class df_shared_ptr: public boost::shared_ptr<T>
{
public:
df_shared_ptr() {}
template<class Y>
explicit df_shared_ptr(Y * p)
{
boost::shared_ptr<T>::reset(p);
}
template<class Y>
df_shared_ptr(df_shared_ptr<Y> const & r):
boost::shared_ptr<T>(r,boost::detail::dynamic_cast_tag())
{}

我不是一个C++程序员,所以我有点不知所措。SALOME论坛上也有类似问题的报道,但没有回复。

最近对boost库的更改取消了boost::detail::dynamic_cast_tag(),取而代之的是一种新的动态铸造机制。这方面的文件很差,甚至根本不存在。

你应该能够使用旧的助推,我认为1.44应该足够了。

我遇到了类似的问题。编辑源并使用dynamic_pointer_cast<>解决了这个问题。在这种情况下:

boost::shared_ptr<T>(r,boost::detail::dynamic_cast_tag()) 

成为

boost::shared_ptr<T>(dynamic_pointer_cast<T>(r))

最新更新