'value' 不是 boost::mpl::aux::wrapped_type 的成员...创建 mex 函数时
'value' is not a member of boost::mpl::aux::wrapped_type...when creating a mex function
我正在使用大量代码,这些代码在 Windows 和 Linux 中编译,gcc>=4.7。它是一个实用程序,可以从某人编写的 m-scripts 在 Matlab 中无缝生成 mex 函数。我在 Mac os x 中编译一个简短的 c 脚本(此处未提供)时遇到问题。我在 C++11 中使用 gcc-4.8。它仅对 headers 使用 Boost 库。它卡住的实用程序代码是:
/* gets mxClassID, given C type>
eg. mx_class_id<float>()*/
template<typename T>
struct mx_class_id
{
operator mxClassID()
{
return static_cast<mxClassID>(boost::mpl::at<mxInverseTypeMap,T>::type::value);
}
};
需要
template<typename T>
mxArray* mxCreateScalar(const T & val)
{
//mxClassID cid=static_cast<mxClassID>(boost::mpl::at<mxInverseTypeMap,T>::type::value);
mxArray * arr=mxCreateNumericMatrix(1,1,mx_class_id<T>(),mxREAL);
mxSetValue(arr,val);
return arr;
}
我错过了什么?是否与 built-in clang 库冲突?还是未指定 header(包括 boost/mpl/at.hpp)?正如我提到的,它确实在 Matlab 中为 Windows 和 Linux.I 编译,已经尝试过 boost 1.51.0(这是我们使用的)和 1.56.0(这是 Matlab 使用的) 但我收到相同的错误消息。
我用来编译的代码是
mex -v /usr/local/bin/gcc-4.8 -I path-to-boost-library -I path-to-private-library -I /usr/local/lib -std=C++11 script.cc
这是我收到的错误消息:
error: 'value' is not a member of 'boost::mpl::aux::wrapped_type <
boost::mpl::aux::type_wrapper < mpl_::void_> > ::type {aka
mpl_::void_}'
感谢任何指点或帮助。谢谢
这已通过 'size_t' 和 'unsigned long int' 的冲突使用解决。
我认为在 Linux、Windows、size_t 中被用在代码中并假设它是 uint64_t。它在两者中编译。
但是,对于 mac os x,它是 size_type 或 unsigned long int。这尤其会产生问题,因为代码通过一对一映射将 c 类型与 Matlab mex 类型匹配。在反向映射中,使用 size_t 这个一对一映射得到 lost 而变成多对一。一旦解决了这个问题,就很容易修复其余部分。
我正在使用大量代码,这些代码在 Windows 和 Linux 中编译,gcc>=4.7。它是一个实用程序,可以从某人编写的 m-scripts 在 Matlab 中无缝生成 mex 函数。我在 Mac os x 中编译一个简短的 c 脚本(此处未提供)时遇到问题。我在 C++11 中使用 gcc-4.8。它仅对 headers 使用 Boost 库。它卡住的实用程序代码是:
/* gets mxClassID, given C type>
eg. mx_class_id<float>()*/
template<typename T>
struct mx_class_id
{
operator mxClassID()
{
return static_cast<mxClassID>(boost::mpl::at<mxInverseTypeMap,T>::type::value);
}
};
需要
template<typename T>
mxArray* mxCreateScalar(const T & val)
{
//mxClassID cid=static_cast<mxClassID>(boost::mpl::at<mxInverseTypeMap,T>::type::value);
mxArray * arr=mxCreateNumericMatrix(1,1,mx_class_id<T>(),mxREAL);
mxSetValue(arr,val);
return arr;
}
我错过了什么?是否与 built-in clang 库冲突?还是未指定 header(包括 boost/mpl/at.hpp)?正如我提到的,它确实在 Matlab 中为 Windows 和 Linux.I 编译,已经尝试过 boost 1.51.0(这是我们使用的)和 1.56.0(这是 Matlab 使用的) 但我收到相同的错误消息。 我用来编译的代码是
mex -v /usr/local/bin/gcc-4.8 -I path-to-boost-library -I path-to-private-library -I /usr/local/lib -std=C++11 script.cc
这是我收到的错误消息:
error: 'value' is not a member of 'boost::mpl::aux::wrapped_type < boost::mpl::aux::type_wrapper < mpl_::void_> > ::type {aka mpl_::void_}'
感谢任何指点或帮助。谢谢
这已通过 'size_t' 和 'unsigned long int' 的冲突使用解决。 我认为在 Linux、Windows、size_t 中被用在代码中并假设它是 uint64_t。它在两者中编译。
但是,对于 mac os x,它是 size_type 或 unsigned long int。这尤其会产生问题,因为代码通过一对一映射将 c 类型与 Matlab mex 类型匹配。在反向映射中,使用 size_t 这个一对一映射得到 lost 而变成多对一。一旦解决了这个问题,就很容易修复其余部分。