char on = "y";
erklärt on
als eine einzigechar
halten. Strings sind mehr als eine char
, so dass Sie sie entweder als Zeiger auf char
oder auf ein Array von char
s speichern müssen.
Das Problem ist, was Sie mit on
tun können bestimmt den richtigen Typ zu verwenden. Aber ich stelle mir vor, angesichts der Art der Fehler in der Post, dass Sie das bereits wissen und durch die gpointer
verwirrt sind.
gpointer
ist im Grunde
typedef void *gpoiner;
Aus diesem Grund müssen Sie nicht geben Sie eine *
mit gpointer
. Lass dich nicht davon täuschen; Wenn Sie andere Zeigertypen neben gpointer
verwenden, benötigen Sie noch die *
für diese anderen Zeigertypen!
Auch die g_signal_connect()
Zeile ist falsch; gpointer on
macht keinen Sinn.
Bitte lassen Sie mich wissen, wenn Sie immer noch nicht verstehen, worüber ich spreche.
Okay, also warum
char on = "y";
ausspucken die Nachricht
warning: initialization makes integer from pointer without a cast [-Wint-conversion]
?
"y"
ist ein Zeiger. Es wird ein Ausdruck vom Typ const char *
ausgewertet. Der Zeiger befindet sich wahrscheinlich im Codeabschnitt der ausführbaren Datei, wo er nicht geändert werden kann (daher die const
).
char
ist eine Ganzzahl, kein Zeiger. Es ist normalerweise nicht möglich, Zeigerwerte in Ganzzahlen zu verschieben, es sei denn, Sie fragen explizit danach, weil Sie möglicherweise einen Integer-Typ verwenden, der zu klein ist, um den Zeiger zu speichern. (Für die Zeiten, in denen es notwendig ist, bietet der C-Standard intptr_t
und uintptr_t
.) In diesem Fall haben Sie nicht gefragt, also möchte der Compiler sicherstellen, dass Sie wirklich gemeint haben, dass Sie die Adresse des Zeigers in eine char
schieben wollten.
Beachten Sie den Teil über die Verwendung einer kleineren ganzen Zahl als notwendig. Deshalb gibt Ihre Zeile g_signal_connect()
die Warnung aus, die es tut: char
ist nicht groß genug, um einen Zeiger zu speichern, also die Behandlung eines char
Wertes wie ein Zeiger ist verpflichtet, wirklich schlechte Sachen zu produzieren.
Danke für die Antwort andlabs. Ja, ich habe das zu spät gesehen und habe meinen Post bearbeitet, während Sie geantwortet haben. Ich habe auch den Code bearbeitet und kompiliert. Der Beitrag wurde auf den Code so aktualisiert, wie es jetzt ist, ich glaube dein Recht hatte ich auch einen Fehler in der Funktion right(). Ich verdauere, was du sagst, und versuche, die Dinge wieder in Ordnung zu bringen. Wenn ich es durchhalte, gebe ich die Zecke. – fernny500
Danke für die Antwort andlabs. Was ich nicht verstehe, ist char on = "y", wenn es nicht existierte, bevor ich es initialisiert habe, wie hat es sich von einem Zeiger zu einem int gewandelt. Ich hoffte, ich würde eine Variable deklarieren und initialisieren, nicht einen Zeiger. Sie können wahrscheinlich sehen, was ich versuche zu tun. Gehe ich falsch herum? Wie man den gpointer Datenparameter der Rückruflinie syntaxiert, könnte ich etwas Hilfe verwenden. Es gab einen Fehler in right(), benutzte den falschen, buff auf 250 gesetzt, so dass das erklärt. Ich würde mich freuen, die GTK-Seite der Dinge richtig zu machen. – fernny500
Versuchte, die Warnungen zu erklären; hoffe das hilft auch! – andlabs