2013-02-24 3 views
0

Итак, я видел много подобных проблем, но ни один из ответов не устраняет мою проблему. Может кто-нибудь объяснить, почему этот код:Простое преобразование tolower не работает

string LinkedListByName::toLower(string stringToConvert){ 

return std::transform(stringToConvert.begin(), stringToConvert.end(), stringToConvert.begin(), ::tolower); } 

дает мне эту ошибку:

conversion from `__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' to non-scalar type `std::string' requested 

В проекте я собираюсь нужно преобразовать много строк, чтобы снизить и повысить это не вариант , Я буквально скопировал и вставил этот код из предыдущих проектов, в которых он функционировал.

Кроме того заголовочный файл, включая следующие:

#include <vector> 
using namespace std; 
#include <iostream> 
using namespace std; 
#include <string> 
using namespace std; 
#include <algorithm> 
#include "Node.h" 
namespace model { 
+2

'используя патезрасе,' это плохая идея почти все время, но это, безусловно, первый раз, когда я видел его использовали три раза подряд ... – us2012

ответ

2

Ваш метод должен возвращать строку, но вместо этого вы пытаетесь вернуть итератор из станд :: преобразования. Измените его следующим образом:

string LinkedListByName::toLower(string stringToConvert){ 
    std::transform(stringToConvert.begin(), stringToConvert.end(), stringToConvert.begin(), ::tolower); 
    return stringToConvert; 
} 
+0

Wow. По какой-то причине я повесил трубку на мысль, что она вернула строку, но она не только действует на нее. в любом случае это сработало так, спасибо. – Noob

+0

Сколько раз вам нужно скопировать строку? Возможно, было бы лучше передать его по ссылке, а не вернуть ничего. – Johnsyweb

+0

«Лучше» - очень субъективный термин, и я сомневаюсь, что мы сможем решить, что лучше для Нуда. Особенно когда у нас так мало информации. – Slava