C++ 功能赢得';不允许比较字符串-C++;
我有一个新函数名为C++ 功能赢得';不允许比较字符串-C++;,c++,pointers,C++,Pointers,我有一个新函数名为removinelligiblecharsfromtargetname void removeInelligibleCharsFromTargetName(string *targetName) { for(int i = 0; i < targetName->length(); i++) { for(int j = 0; j < ineligibleChars.length(); j++) {
removinelligiblecharsfromtargetname
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] = '_';
}
}
}
void removeInelligibleCharsFromTargetName(字符串*targetName)
{
对于(int i=0;ilength();i++)
{
对于(int j=0;j
问题是,当我尝试在if循环中进行比较时,我得到以下错误:
错误C2678:二进制“==”:未找到接受类型为“std::string”的左侧操作数的运算符(或没有可接受的转换)
32>c:\program files\microsoft SDK\windows\v6.0a\include\guiddef.h(192):在尝试匹配参数列表(std::string,char)时,可以是“int operator==(const GUID&,const GUID&)”
但是把完全相同的嵌套循环放回我调用它的地方,而不是调用函数,它工作得很好
有人能告诉我它在函数中不起作用,但在函数之外却很好。毫无疑问,它是一个指针,但我不知道是什么。为什么要将指针传递给
字符串?那真是个坏主意。传递推荐信
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] = '_';
}
}
}
void removeInelligibleCharsFromTargetName(字符串和targetName)
{
对于(int i=0;i
问题是,当您有一个指针时,targetName[i]
与*(targetName+i)
相同。这相当于索引到字符串数组中。如果没有字符串数组,这只会导致未定义的行为。幸运的是,代码没有编译(无法将字符串与字符进行比较),编译器捕获了错误。如果它发生在编译时,当您运行它时,您可能会观察到一些非常奇怪的行为
当您有一个字符串或对该字符串的引用时,targetName[i]
调用字符串上的操作符[]
,该操作符将索引到字符串中并实际为您提供一个字符。为什么要传递指向字符串的指针?那真是个坏主意。传递推荐信
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] = '_';
}
}
}
void removeInelligibleCharsFromTargetName(字符串和targetName)
{
对于(int i=0;i
问题是,当您有一个指针时,targetName[i]
与*(targetName+i)
相同。这相当于索引到字符串数组中。如果没有字符串数组,这只会导致未定义的行为。幸运的是,代码没有编译(无法将字符串与字符进行比较),编译器捕获了错误。如果它发生在编译时,当您运行它时,您可能会观察到一些非常奇怪的行为
当您有一个字符串
,或对该字符串的引用时,targetName[i]
调用字符串上的操作符[]
,该操作符将索引到字符串中并实际为您提供一个字符。将targetName[i]
的每次出现都更改为(*targetName)[i]
。或者,按照R.Martinho Fernandes的建议,传递一个引用而不是指针。将出现的targetName[i]
更改为(*targetName)[i]
。或者,按照R.Martinho Fernandes的建议,传递一个引用而不是指针。当targetName
是指针时,此代码
if(targetName[i] == ineligibleChars[j])
targetName[i] = '_';
尝试从指针索引,就像它是(指向)数组的指针一样。要访问实际指向的字符串,需要在索引到字符串之前取消对指针的引用
if((*targetName)[i] == ineligibleChars[j])
(*targetName)[i] = '_';
当targetName
是指针时,此代码
if(targetName[i] == ineligibleChars[j])
targetName[i] = '_';
尝试从指针索引,就像它是(指向)数组的指针一样。要访问实际指向的字符串,需要在索引到字符串之前取消对指针的引用
if((*targetName)[i] == ineligibleChars[j])
(*targetName)[i] = '_';
我想你发现了错误:)。我想你发现了错误:)。