我遇到了一个奇怪的编译问题。任何帮助解决它将不胜感激。我正在将我的应用程序与boost库相关联。我需要在Centos和Ubuntu上编译我的应用程序。在Ubuntu上一切正常,同样的代码无法在Centos 7上编译。错误的位置在提升。不确定问题是否实际上是在提升中,或者是否有其他因素导致错误显示在提升中。当我搜索错误时,我遇到了这个link。但是,这个问题是针对较旧版本的boost。我在下面列出了错误输出:
/usr/local/include/boost/chrono/duration.hpp: In function 'constexpr typename boost::enable_if<boost::mpl::and_<boost::is_convertible<Rep1, typename boost::common_type<Rep1, Rep2>::type>, boost::is_convertible<Rep2, typename boost::common_type<Rep1, Rep2>::type> >, boost::chrono::duration<typename boost::common_type<Rep1, Rep2>::type, Period> >::type boost::chrono::operator*(const boost::chrono::duration<Rep, Period>&, const Rep2&)':
In file included from /usr/local/include/boost/chrono/time_point.hpp:33:0,
from /usr/local/include/boost/thread/lock_types.hpp:22,
from /usr/local/include/boost/thread/lock_algorithms.hpp:11,
from /usr/local/include/boost/thread/locks.hpp:10,
...
/usr/local/include/boost/chrono/duration.hpp:575:34: error: type/value mismatch at argument 1 in template parameter list for 'template<class Rep, class Period> class boost::chrono::duration'
typedef duration<CR, Period> CD;
^
/usr/local/include/boost/chrono/duration.hpp:575:34: error: expected a type, got '13u'
/usr/local/include/boost/chrono/duration.hpp:575:38: error: invalid type in declaration before ';' token
typedef duration<CR, Period> CD;
来自/usr/local/include/boost/chrono/duration.hpp的相应代码:
// Duration *
template <class Rep1, class Period, class Rep2>
inline BOOST_CONSTEXPR
typename boost::enable_if <
mpl::and_ <
boost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>,
boost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>
>,
duration<typename common_type<Rep1, Rep2>::type, Period>
>::type
operator*(const duration<Rep1, Period>& d, const Rep2& s)
{
typedef typename common_type<Rep1, Rep2>::type CR;
typedef duration<CR, Period> CD;
return CD(CD(d).count()*static_cast<CR>(s));
}
我在Centos7上遇到此错误。在Ubuntu上不会发生。
Centos版本:
Boost:1.58.0,OS:Centos 7,C ++:g ++ 4.8.5
Ubuntu版本:
Boost:1.58.0,OS:Ubuntu 16.04,C ++:g ++ 5.4.0
不确定C ++编译器的区别是否存在问题。 Centos7上的c ++编译器的默认版本是4.8.5。顺便说一下,CentOS7上的默认升级版本是1.53.2。我编译并安装了boost 1.58.0版本以最小化变量。任何帮助是极大的赞赏。感谢。
答案 0 :(得分:0)
根据错误信息,我的猜测(以及所有这一切,一个猜测)就是你所拥有的某个地方:
#define CR 13u
导致编译错误。