Bestimmten String in std::vector ersetzen
-
R3dNeXX schrieb:
replace(vCfgContent.begin(), vCfgContent.end(), "Standard Scroll Bars (English)", strCfgDir); // So geht das ja nicht !- Hast dus ausprobiert?
- Was heißt "geht nicht" (Fehlermeldung?)
-
Hm nunja, die Doku hab ich mir angeschaut, werde da aber trotzdem nicht weiter schlau daraus.
Ich kann mit std::replace ja Chars, Int, ... ersetzen, aber kein std::string !
Oder täusche ich mich ?
Gibts da andere Möglichkeiten oder Umwege ?Denn als Compiler-Error kireg ich mit Angabe von std:.string ja
MSVC schrieb:
error C2782: 'void std::replace(_FwdIt,_FwdIt,const _Ty &,const _Ty &)' : template parameter '_Ty' is ambiguous
An den einfachen (?) Dingen scheiterts !

PS: Code oben editiert.
EDIT:
Da war jemand schneller !
zu 1.: Ja, habe ich !Aber gibts vielleicht ne Unicode-Variante davon ?
-
du kannst mit std::replace alles ersetzen was man vergleichen und kopieren kann. Also auch std:.strings.
In dienem Fall ist das problem lediglich, dass replace mit zweimal dem gleichen Typ als Parameter deklariert ist (nämlich dem Templateparameter _Ty), du aber einmal einen wchar_t* und einmal einen wstring lieferst. Er weiß daher nicht ob _Ty jetzt wchar_t* odert wstring sein soll. Zwei Lösungsmöglichkeiten gibts:- Du gibst den Templateparameter explizit an:
replace<wstring>(/* parameter wie gehabt*/) - Du konvertierst den char* in einen wstring, dann ist der Typ eindeutig:
[c]replace(vCfgContent.begin(), vCfgContent.end(), wstring(L"Standard Scroll Bars (English)"), strCfgDir);
Ich würd die zweite Möglichkeit bevorzugen.
- Du gibst den Templateparameter explizit an:
-
pumuckl schrieb:
du kannst mit std::replace alles ersetzen was man vergleichen und kopieren kann. Also auch std:.strings.
Ok, hätte mich ja auch gewundert ehrlich gesagt.
Perfekt, habe die 2. Möglichkeit benutzt und funktioniert so wie es soll !
Vielen Dank !
Hab irgendwie nicht drangedacht, den 2. Parameter in wstring zu casten !
War überzeugt, dass es funzt bei der Angabe des L (Makros ?).
-
R3dNeXX schrieb:
War überzeugt, dass es funzt bei der Angabe des L (Makros ?).
Ist kein Makro, sondern kennzeichnet das Ganze nur als Wstring-Literal (im Vergleich zum normalen String-Literal. Und Literale sind dank C-Historie char* bzw. wchar*
-
Ok, war noch ne kleine (versteckte) Frage.

Nochmals vielen Dank !
-
Hab irgendwie nicht drangedacht, den 2. Parameter in wstring zu casten !
es war der 3. parameter
und es war kein cast sondern lediglich ein aufruf eines konstruktors und damit eine (saubere) konvertierung...bb
-
Per Cast würde es doch genauso funktionieren !(?)
Und ich zähle aus Gewohnheit immer von 0 an (in der Programmierung).
Deshalb sagte ich 2.Parameter.
-
R3dNeXX schrieb:
Per Cast würde es doch genauso funktionieren !(?)
Ein Cast weist den Compiler nur an "wandle X in Y um" - je nachdem welcher Cast verwendet wird mit gewissen Restriktionen. In dem besagten Fall würde der Cast vom Compiler durch den selben Konstruktoraufruf realisiert werden den wir hier angegeben haben.
-
Ok, ich verstehe.
Danke !

Mir fehlts noch ziemlich an solchen Infos.