有人可以告诉我为什么我会得到:“非法使用这种类型的表达式:std :: string”在for循环的行上?据我所知,一切都应该正确设置。我正在尝试遍历向量中的字符串并检查每个字符串成员的大小写(虽然我真的只对第一个感兴趣,因此排序算法不会将大写单词与小写单词分开...)
/* BiasedSort: accepts vector<string> by REFERENCE and sorts the vector lexographically, except that if the vector
* contains "Me First", that string is always at the front.
*/
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
// getting error on the "for" line.
void ConvertToLower (vector<string> &vector)
{
for (vector<string>::iterator iter = vector.begin();
iter != vector.end(); ++iter) {
string iterString = *iter;
transform(iterString.begin(), iterString.end(), iterString.begin(), ::tolower);
}
}
void BiasedSort (vector<string> &vector)
{
ConvertToLower(vector);
sort(vector.begin(), vector.end());
}
int main ()
{
vector<string> myVector;
myVector.push_back("this");
myVector.push_back("string");
myVector.push_back("and");
myVector.push_back("vector");
myVector.push_back("are for");
myVector.push_back("testing");
myVector.push_back("purposes");
copy(myVector.begin(), myVector.end(), ostream_iterator<string>(cout, " "));
cout << endl;
BiasedSort(myVector);
copy(myVector.begin(), myVector.end(), ostream_iterator<string>(cout, " "));
cout << endl;
system("pause");
return 0;
}
答案 0 :(得分:3)
我认为这里的问题是您已将参数命名为vector
:
void ConvertToLower (vector<string> &vector)
{
for (vector<string>::iterator iter = vector.begin(); /* ... */
因此,编译器正在处理行
vector<string>::iterator
作为
((vector < string) > (::iterator))
即,将vector
与string
进行比较,将结果与::iterator
进行比较。
要解决此问题,请尝试将参数重命名为函数,以便不命名参数vector
。或者,您可以对类型std::vector
进行完全限定,以明确表示您正在创建std::vector<string>::iterator
,而不是执行涉及参数vector
的某种表达。
希望这有帮助!
答案 1 :(得分:0)
已编辑:您不应在此功能中使用名称vector
作为标识符。