std :: string ошибка в векторе <string>:: iterator - PullRequest
2 голосов
/ 29 января 2012

Может кто-нибудь сказать мне, почему я получаю: "Нелегальное использование этого типа выражения: 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;
}

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Я считаю, что проблема в том, что вы назвали параметр 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.

Надеюсь, это поможет!

0 голосов
/ 29 января 2012

Отредактировано: Вы не должны использовать имя vector в качестве идентификатора в этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...