首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用boost::concept_check时出现编译错误

使用boost::concept_check时出现编译错误
EN

Stack Overflow用户
提问于 2009-08-18 13:06:53
回答 2查看 1.4K关注 0票数 1

我正在尝试编译简单的示例来使用boost concept_check

代码如下:

代码语言:javascript
复制
#include <vector>
#include <complex>
#include <algorithm>
#include <boost/iterator.hpp>
#include <boost/concept_check.hpp>

template <class foo> 
void my_do_sort(std::vector<foo>& v) 
{
  BOOST_CONCEPT_ASSERT((RandomAccessIterator<foo>));
  std::stable_sort(v.begin(),v.end())
}
int main()
{
  std::vector<std::complex<double> > v;
  v.push_back(std::complex<double>(1,3));
  v.push_back(std::complex<double>(2,4));
  my_do_sort(v);
}

然后,我得到以下错误:

代码语言:javascript
复制
g++ -I~/tmp/BOOST/boost_1_39_0 -g3 -ggdb -pedantic -pedantic-errors -Wall -Werror -O0 --save-temps con1.cpp -o con1     
con1.cpp: In function 'void my_do_sort(std::vector<foo, std::allocator<_CharT> >&)':
con1.cpp:11: error: `*' cannot appear in a constant-expression
con1.cpp:11: error: a call to a constructor cannot appear in a constant-expression
con1.cpp:11: error: template argument 1 is invalid
con1.cpp:11: error: template argument 1 is invalid
con1.cpp:11: error: invalid type in declaration before ';' token
make: *** [con1] Error 1

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-18 13:34:51

这只是一个编译问题。我不得不使用boost命名空间。

票数 2
EN

Stack Overflow用户

发布于 2009-08-18 13:20:33

如果你重读了你的代码,这并不奇怪。它无法编译,因为概念检查失败。您是在断言foo应该实现RandomAccessIterator概念。库中的整个要点是,如果概念检查失败,则会产生编译错误(就像您看到的那样)。

但是foo不是迭代器。它是一个std::complex<double>

据我所知,它应该是BOOST_CONCEPT_ASSERT((RandomAccessIterator<v::iterator>));

您需要检查向量迭代器是否为随机访问迭代器。并不是说存储在迭代器中的复数是随机访问迭代器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1293708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档