无法在gcc中创建std :: pair的const成员

时间:2014-04-18 19:14:32

标签: c++ gcc const std-pair

std::vector< std::pair< const QTextCharFormat, std::vector< std::tr1::regex > > > foo;
std::vector< std::pair< const QTextCharFormat, std::vector< std::tr1::regex > > > bar;

赢得了gcc 4.6.3的工作,因为我无法调用:bar.push_back( std::make_pair( foo.first, foo.second ) );这在Visual Studio上编译并运行正常,但在gcc下我得到:

/ usr / include / c ++ / 4.6 / bits / stl_pair.h:156:2:错误:将'const QTextCharFormat'作为'此'参数传递给'QTextCharFormat&amp; QTextCharFormat :: operator =(const QTextCharFormat&amp;)'丢弃限定符[-fpermissive]

是否存在Visual Studio正在跳过的中间件,它是在gcc下创建的?

2 个答案:

答案 0 :(得分:1)

好吧,barstd::vector<std::pair<...>>,因此尝试将std::pair(来自std::make_pair)分配给它会失败。你可能想要的是将新的std::pair推回bar

foo也是std::vector,因此您需要选择一个元素,然后只需 调用.first.second

bar.emplace_back(foo[i].first, foo[i].second);

但是从您使用它的方式来看,您很可能错误地在std::vectorbar的定义中添加了foo

答案 1 :(得分:1)

来自this answer

向量中的项目必须是可分配的。 const对象不可分配,因此尝试将它们存储在向量中将失败(或者至少可能失败 - 代码无效,但编译器可以自由地接受它,如果它选择的话,尽管大多数程序员通常会更喜欢拒绝无效代码。