Pozerám sa cez niektoré príklady a nezdá sa mi, že by som vedel, prečo nefunguje funkcia nahradenia reťazca. Používam Visual C ++ 2010
riadok kódu, ktorý sa pokúšam kompilovať, je:
string MyClass::replacestr (const string &input){
string subString = "str";
string subString2 = "STR";
for(int index = input.find(subString); index != string::npos; index = input.find(subString, index +subString.length()))
{
input.replace(index, 2, subString2);
}
}
To mi dáva túto chybu vo vizuálnom štúdiu:
3 IntelliSense: no instance of overloaded function "std::basic_string<_Elem, _Traits, _Ax>::replace [with _Elem=char, _Traits=std::char_traits<char>, _Ax=std::allocator<char>]" matches the argument list and object (the object has type qualifiers that prevent a match) c:..test.cpp 36 Test
Len som don "t pochopiť, prečo to zvyknutý pracovať tak, ako to bolo vysvetlené v c + + odkaz webovej stránky.
odpovede:
2 pre odpoveď č. 1reťazec nahradí obsah reťazca. Váš reťazec je označený ako konšt. To znamená, že nemôžete na to zavolať.
2 pre odpoveď č. 2
Nahradiť modifikuje obsah reťazca (nie je členskou funkciou). Prechádzate okolo const
odkaz na funkciu. To je dôvod, prečo vám náhrada dáva chyby.
Nemôžete volať funkciu non const člena na objekt const.
Chybové hlásenie však mohlo byť oveľa jasnejšie.