2013-02-24 21 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

'使用命名空間std;'是一個壞主意,在幾乎所有的時間,但是這肯定是我第一次看到它在一排... – us2012 2013-02-24 02:07:50

回答

2

你的方法應該返回字符串,而是試圖從返回的std ::迭代器變換。它改成這樣:

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

哇使用三次。由於某種原因,我掛斷了它返回一個字符串的想法,但它並不是只對它起作用。無論如何這工作,謝謝。 – Noob 2013-02-24 02:10:32

+0

你需要複製'string'多少次?也許最好通過引用來傳遞它,而不是返回任何東西。 – Johnsyweb 2013-02-24 02:26:49

+0

「更好」是非常主觀的術語,我懷疑我們可以決定對Nood更好。特別是當我們有這麼少的信息時。 – Slava 2013-02-24 03:14:07