我最近有一个项目将旧的dll从Visual Studio 6升级到Visual Studio 2010.升级后我有68个错误,我已经减少到1个。
MessageGroup::MessageGroup(const char *name, WordCollection *words) {
_name.assign(name);
_strupr( _name.begin() );
setWordCollection(words);
}
错误C2664:'_ strupr':无法从'std :: _ String_iterator< _Elem,_Traits,_Alloc>'转换参数1到'char *'
答案 0 :(得分:0)
_strupr
期望看到指向char的指针,而_name为std::string
且它的begin
返回迭代器。要获取可用于_strupr
的字符的基础指针,请使用_name.c_str()
。
但是,由于您无法修改c_str()
返回的const指针,因此必须重写整个代码。例如:
MessageGroup::MessageGroup(const char *name, WordCollection *words) :
_name(name) {
std::transform(name.begin(), name.end(), name.begin(),
[](char ch) { return ::toupper(ch); });
}
<强>奖金强>
为什么升级之前它可以工作,你可能会问?因为在古代VS 6中,字符串的迭代器是char*
,因此对于_strupr()
来说已经足够了。但是,这样的代码有问题,因为std::string
不必以'\ 0'结尾,因此提供给_strupr
的字符串不是必需的。