为了清楚起见,我不是要问如何遍历字符串向量(这是我的所有搜索都出现了),我想迭代字符串向量中包含的字符串。尝试从向量中的字符串赋值字符串迭代器时,我遇到了链接器错误。
下面的代码引用了一个const向量的字符串。该函数的目的是颠倒字母和元素的顺序,所以如果你传入一个包含{“abc”,“def”,“ghi”}的字符串向量,它会重新排序它们并返回一个包含字符串的向量{“ihg”,“fed”,“cba”}。应该注意,该函数在头文件中声明为static。当我尝试在for循环中尝试初始化字符串迭代器时,我遇到了问题。我收到链接器错误:
"No matching constructor for initialization of 'std::__1::__wrap_iter<char*>'
我想通过 - &gt;访问rbegin()从矢量迭代器可以工作,但...我很难过。为什么stringsVectorIterator-&gt; rend()在分配给string :: reverse_iterator rit时会导致链接器错误?
vector<string> StringUtility::reverse(const vector<string> &strings)
{
// Create a vector of strings with the same size vector as the one being passed in.
vector<string> returnValue( strings.size() );
vector<string>::const_reverse_iterator stringsVectorIterator;
size_t returnVectorCounter;
for (stringsVectorIterator = strings.rbegin(), returnVectorCounter = 0;
stringsVectorIterator != strings.rend();
stringsVectorIterator++, returnVectorCounter++)
{
// the problem is in the initialization of the string iterator, it creates
// a linker error.
for (string::reverse_iterator rit = stringsVectorIterator->rbegin();
rit != stringsVectorIterator->rend();
++rit)
{
returnValue[returnVectorCounter].push_back(*rit);
}
}
return returnValue;
};
答案 0 :(得分:5)
stringsVectorIterator
是const
迭代器,因此其目标字符串为const
。这意味着您无法在字符串上获得非const
迭代器。
更改内循环:
for (string::const_reverse_iterator rit = ...
^^^^^^
一切都应该好。
在C ++ 11或更高版本中,您可以使用auto
来避免这些麻烦。