C++ - [Error] invalid conversion from 'const char*" to 'char*' - was tun?
Guten Morgen,
Ich habe bereits in der Überschrift den Fehler gezeigt, jedoch zeige ich ihn hier gerne noch einmal:
[Error] invalid conversion from 'const char*' to 'char*' [-fpermissive]
Das wird mir angezeigt, wenn ich versuche meinen Script auszuführen. Nach gründlicher Recherche habe ich heraus gefunden dass der Fehler normalerweise in solchem Code auftaucht:
Falsch: char x = "x";
Richtig: char y = 'y';
aber bei mir ist das ganze komplizierter. hier mein Code:
<a href="http://pastebin.com/xVu1aPFd">http://pastebin.com/xVu1aPFd</a>
es handelt sich um einen Code Ausschnitt da, mein Programm 130 Zeilen umfasst und das den Ramen hier einfach sprengen würde.
Der Fehler wird mir in Zeile 3 angezeigt.
Was tut das Programm?
ganz einfach, die Funktion testWord erhält ein Wort welches es dann mit einem CMD Befehl zusammen fügt und an eine Funktion weitergibt, die diesen Befehl in der CMD ausführt und einen Ergebnis zurückgibt. In diesem Ergebnis wird dann gesucht ob an einem Bestimmten Punkt ein "D" auftaucht.
Vielen Dank das du dir das hier durchgelesen hast.
Und Danke für eure Hilfe!
2 Antworten
Bei dem Beispiel mit "x" und "y" würde stehen: "... to 'char'" (ohne "*") und nicht "... to 'char *'" (mit "*").
Dein Problem ist, dass man bei Zeigern in C und C++ durch ein "const" angeben kann, dass die Daten, wohin der Zeiger zeigt, nicht verändert werden dürfen. Beispiel:
const char *a;
char *b;
Der Zeiger "a" zeigt auf Daten, die nicht verändert werden dürfen, während Zeiger "b" auf Daten zeigt, die verändert werden dürfen.
Folgender Befehl ist dann erlaubt:
a = b;
"a" und "b" zeigen dann auf dieselben Daten, jedoch dürfen diese nur mit einem Zugriff über die Variable "b" (und nicht über "a") verändert werden.
Folgender Befehl ist nicht erlaubt, da man dadurch Daten, die eigentlich nicht verändert werden dürfen, verändern kann:
b = a;
Man kann dem C- oder C++-Compiler aber auch explizit sagen, dass er das ignorieren soll. Dazu wird ein so-genannter "Cast" verwendet:
b = (char *)a;
Bei aktuellen C++-Versionen gibt es (im Gegensatz zu C) noch spezielle Varianten von Casts (wie z.B. den "const_cast").
Das Problem kann schon in folgendem Fall auftreten:
void eineFunktion(char *argument);
...
eineFunktion("Hallo");
Die Lösung würde dann folgendermaßen aussehen:
eineFunktion((char *)"Hallo");
Hmm, das ist sicherlich hilfreich, jedoch ist mein PC jetzt schrott. Er stank ein wenig verbrannt. Ich arbeite jetzt gerade mit einem alten build und ich denke mittlerweile ist dieser bereits besser als der andere, und ich werde es nie ausprobieren können. (vielleicht doch)
Danke für deine Zeit!
Das sieht mir nach einer fehlgeschlagenen automatischen Konvertierung des Präprozessors aus aber ich bin mir nicht sicher. Ich rate dir ein C++ Forum an aber gutefrage.net ist definitiv der falsche Ort für sowas...
Danke für den Tipp.