Fehlermeldung beim Kompilieren
-
Nukularfüsiker schrieb:
Die Deklaration:
int pl_parampl (const char *parameter, void *value);Es wird ein void* erwartet und du übergibst einen const char*. Sollte zwar kompilieren, aber jenachdem was mit value gemacht wird, kann's ne AccessViolation geben.
-
Nukularfüsiker schrieb:
Möglicherweise kompilierst du das Programm als C++-Programm statt als C, wie es sein sollte?
Ja ich denke Du hast recht. Ich möchte es aber als c++ kopilieren was muss ich also tun?
-
hab_ne_Frage schrieb:
Nukularfüsiker schrieb:
Möglicherweise kompilierst du das Programm als C++-Programm statt als C, wie es sein sollte?
Ja ich denke Du hast recht. Ich möchte es aber als c++ kopilieren was muss ich also tun?
Doku lesen soll helfen.
http://www.gnu.org/software/plotutils/manual/html_node/plotutils_55.html
-
Nukularfüsiker schrieb:
hab_ne_Frage schrieb:
Nukularfüsiker schrieb:
Möglicherweise kompilierst du das Programm als C++-Programm statt als C, wie es sein sollte?
Ja ich denke Du hast recht. Ich möchte es aber als c++ kopilieren was muss ich also tun?
Doku lesen soll helfen.
http://www.gnu.org/software/plotutils/manual/html_node/plotutils_55.htmlversteh ich nicht?
-
hab_ne_frage schrieb:
versteh ich nicht?
Auf der verlinkten Seite und den darauf folgenden ist erklärt, wie man die Bibliothek mit C++ benutzt. Was genau verstehst du denn nicht, den Link, den Text oder den Beispielcode?
-
Wie genau ich das jetzt benutze?
-
hab_ne_Frage schrieb:
Wie genau ich das jetzt benutze?
Lösung = Lesen();
Steht eigentlich alles da. Was genau ist das Problem? Wenn du was "genaues" wissen willst, muss du auch was "genaues" fragen.
-
hab_ne_Frage schrieb:
Wie genau ich das jetzt benutze?
So wie es in der oben verlinkten Doku erklärt wird. (Auf so eine allgemeine Frage kanns auch nur eine allgemeine Antwort geben)
-
GIFPlotter plotter(stdin, stdout, stderr);so benutze ich jetzt den constructor und wie läuft das jetzt mit
dem Setzen der Parameter über pl_parampl() ?
-
int Plotter::parampl (const char *parameter, void *value);Wenn du nicht weißt, wie man Methoden aufruft, dann mach's doch lieber in C.
-
ups ich hatte GIFPlotter::pl_parampl, kein wunder das das nicht klappte
Danke
-
GIFPlotter plotter(stdin, stdout, stderr); /* set Plotter parameters */ plotter.parampl( "BITMAPSIZE", "150x100" ); plotter.parampl( "BG_COLOR", "orange" ); plotter.parampl( "TRANSPARENT_COLOR", "orange" ); plotter.parampl( "GIF_ITERATIONS", "100" ); plotter.parampl( "GIF_DELAY", "5" );Wieso bekomme ich den gleichen Fehler wie eingangs?
-
hab_ne_frage schrieb:
Wieso bekomme ich den gleichen Fehler wie eingangs?
Weil du immernoch einen const char* an einen void* übergibst. Wenn die Doku zu der verwendeten Bibliothek einigermaßen brauchbar ist solltest du dort finden, wie die Leute sich die Aufrufe in C++ gedacht haben.
Außerdem solltest du dich einmal ein bisschen mit dem Typsystem von C++ und vor allem der Bedeutung von const auseinandersetzen.
-
pumuckl schrieb:
hab_ne_frage schrieb:
Wieso bekomme ich den gleichen Fehler wie eingangs?
Weil du immernoch einen const char* an einen void* übergibst. Wenn die Doku zu der verwendeten Bibliothek einigermaßen brauchbar ist solltest du dort finden, wie die Leute sich die Aufrufe in C++ gedacht haben.
Außerdem solltest du dich einmal ein bisschen mit dem Typsystem von C++ und vor allem der Bedeutung von const auseinandersetzen.
Die Fehlermeldung als solche ist mir klar, ich weiss nur nicht wie ich das jetzt beheben soll?
-
hab_ne_frage schrieb:
Wieso bekomme ich den gleichen Fehler wie eingangs?
Das hat pumuckl und ich schon mehrfach gesagt.
value ist ein void*. Das bedeutet, es ist ein Zeiger auf eine Speicherstelle. Da diese NICHT als const deklariert ist, kann die Methode die referenzierten Daten verändern.
Wenn du jetzt aber "" benutzt, dann ist das ein const char*. Der Compiler kann sowas direkt einbauen, weil kein schreibender Zugriff nötig ist.hab_ne_frage schrieb:
Die Fehlermeldung als solche ist mir klar, ich weiss nur nicht wie ich das jetzt beheben soll?
Übergib einen nicht konstanten Zeiger.
http://www.gnu.org/software/plotutils/manual/html_node/plotutils_63.html#SEC63
-
pumuckl schrieb:
Weil du immernoch einen const char* an einen void* übergibst. Wenn die Doku zu der verwendeten Bibliothek einigermaßen brauchbar ist solltest du dort finden, wie die Leute sich die Aufrufe in C++ gedacht haben.
So wie ich das sehe, haben sie sich nicht sehr viel dabei gedacht. Da fehlt einfach ein
constin der Deklaration. Der Beispielcode macht es genau so und dürfte auch nicht kompilieren.@hab_ne_frage: versuch mal
plotter.parampl( "BITMAPSIZE", const_cast<char*>("150x100") );
-
das funktioniert leider auch nicht!
-
Was heißt denn funktioniert nicht? Was für einen Compiler benutzt du? Der VC wandelt implizit in void* um, auch wenn's nicht ganz ISO ist geht dann sowas:
void* p = "Hallo";und zwar ohne Warnung!
-
Nein das geht auch nicht
ungültige Umwandlung von »const void*« in »void*«
-
Bau mal bitte dein komplettes Projekt neu und poste die komplette Fehlermeldung (mit allen Zeilennummern usw.) und die entsprechende Codezeile mit den vorherigen und folgenden 10 Codezeilen.