我有一个叫做的新功能removeInelligibleCharsFromTargetName.
void removeInelligibleCharsFromTargetName(string *targetName)
{
for(int i = 0; i < targetName->length(); i++)
{
for(int j = 0; j < ineligibleChars.length(); j++)
{
if(targetName[i] == ineligibleChars[j])
targetName[i] = '_';
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当我在if循环中尝试比较时,我得到以下错误:
错误C2678:binary'==':找不到运算符,它接受类型为'std :: string'的左手操作数(或者没有可接受的转换)32> c:\ program files\microsoft sdks\windows\v6. 0a\include\guiddef.h(192):尝试匹配参数列表'(std :: string,char)时可能是'int operator ==(const GUID&,const GUID&)'
但是把那个完全相同的嵌套循环放回到我调用的地方而不是调用它可以正常工作的函数.
有人可以告诉我,它不会在函数中工作但在函数外工作正常.毫无疑问,这是一个指针,但我不知道是什么.
你为什么要把指针传给string?这是一个非常糟糕的主意.传递参考.
void removeInelligibleCharsFromTargetName(string& targetName)
{
for(int i = 0; i < targetName.length(); i++)
{
for(int j = 0; j < ineligibleChars.length(); j++)
{
if(targetName[i] == ineligibleChars[j])
targetName[i] = '_';
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当你有一个指针时,targetName[i]它是相同的*(targetName+i).这相当于索引到一个字符串数组.如果您没有字符串数组,则只会导致未定义的行为.您很幸运,代码无法编译(无法将字符串与字符进行比较),编译器捕获了错误.如果它碰巧编译,当你运行它时,你可能会发现一些非常奇怪的行为.
当你有一个string或一个引用时,targetName[i]调用operator[]字符串,索引到字符串,实际上给你一个字符.