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下创建的?
答案 0 :(得分:1)
好吧,bar
是std::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::vector
和bar
的定义中添加了foo
。
答案 1 :(得分:1)
来自this answer:
向量中的项目必须是可分配的。 const对象不可分配,因此尝试将它们存储在向量中将失败(或者至少可能失败 - 代码无效,但编译器可以自由地接受它,如果它选择的话,尽管大多数程序员通常会更喜欢拒绝无效代码。