2016-01-25 44 views
-2

我最近買了一個項目,從Visual Studio 6的舊的DLL升級到Visual Studio 2010中,我得到了升級,我已經減少到1C++錯誤_strupr:不能轉換參數1

MessageGroup::MessageGroup(const char *name, WordCollection *words) { 
    _name.assign(name); 
    _strupr(_name.begin()); 
    setWordCollection(words); 
} 
後68個錯誤

錯誤C2664: '_strupr':無法從 '的std :: _ _Elem,_Traits,_Alloc> String_iterator <' 轉換參數1 '的char *'

+1

什麼是'_name','_strupr()','setWordCollection()'實際上?請提供[mcve]。 –

+0

@πάνταῥεῖ,_name是'std :: string',_strupr是一個Windows特定版本的strupr。 setWordCollection我不知道。 – SergeyA

回答

0

_strupr希望看到的字符指針,而_name是std::string它的begin返回一個迭代器。要獲取可用於_strupr的字符的基礎指針,請使用_name.c_str()

但是,由於您無法修改由c_str()返回的常量指針,因此必須重寫整個代碼。例如:

MessageGroup::MessageGroup(const char *name, WordCollection *words) : 
    _name(name) { 
    std::transform(name.begin(), name.end(), name.begin(), 
       [](char ch) { return ::toupper(ch); }); 
} 

BONUS

爲什麼它在升級前工作,你可能會問?因爲在古代VS 6中,迭代器到字符串是char*,並且因此可以用於_strupr()。但是,這樣的代碼有問題,因爲std::string不必以'\ 0'結尾,因此提供給_strupr的字符串不是必需的。

相關問題