C ++错误_strupr:无法转换参数1

时间:2016-01-25 20:11:56

标签: c++ visual-studio

我最近有一个项目将旧的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 :: _ St​​ring_iterator< _Elem,_Traits,_Alloc>'转换参数1到'char *'

1 个答案:

答案 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的字符串不是必需的。