我试图从多个向量中打印出每个向量中的所有元素。构建失败但错误发生在头文件中的某个地方,恐怕我根本不理解错误代码。任何帮助将不胜感激!这是错误:
error: invalid conversion from 'const std::basic_string<char, std::char_traits<char>, std::allocator<char> >* const' to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >*'
以下是导致问题的代码。
multiset<vector < string > > setOfRules;
vector<string> testing,testing2;
testing.push_back("bar");
testing.push_back("foo");
testing2.push_back("foo2");
testing2.push_back("bar2");
setOfRules.insert(testing);
setOfRules.insert(testing2);
for (multiset< vector <string > >::iterator myIterator = setOfRules.begin();
myIterator!=setOfRules.end();
++myIterator)
{
for (vector< string >::iterator myOtherIterator = ( *myIterator ).begin();
myOtherIterator != ( *myIterator ).end();
++myOtherIterator)
{
cout << *myOtherIterator << " " ;
}
cout << endl;
}
答案 0 :(得分:6)
C ++ 11 Standard声称,对于值类型与键类型相同的关联容器,迭代器和const_iterator都是常量迭代器< /强>
实际上multiset<vector<string>>::iterator
实际上是const_iterator
。与std::set
迭代器相同的技巧 - 它们都是有效的。
这意味着vector<string>::iterator myOtherIterator = *myIterator.begin()
语句将失败,因为您尝试从 const 对象获取非const 迭代器(由*myIterator
给出,即{ {1}})。
要解决此问题,您需要使用const
:
vector<string>::const_iterator
答案 1 :(得分:1)
我的猜测,这只是一个猜测,因为你没有显示所有必要的代码知道,是你使用了错误的迭代器类型。基于编译器呕吐,您需要使用const_iterator,因为您的对象是常量。
您无法分配关联容器的关键部分(如multiset)。这意味着你的向量是常量。你需要const迭代器来迭代它。
多重集似乎是非常量的。您不需要const迭代器来导航它。它包含的值类型的const性质将防止分配给键。
答案 2 :(得分:1)
有一个普通的multiset<XXX>::iterator myIterator
是错误的,因为如果你这样做了
*myIterator = ...;
然后你就会破坏多重集。
使用const_iterator
代替
for (multiset< vector <string > >::const_iterator myIterator = setOfRules.begin(); myIterator!=setOfRules.end(); ++myIterator) {