C - Einstellung, um eine Struktur zu null (inkompatible Typen in Zuweisung)
Ich habe folgende struct:
struct elem {
int number;
char character;
};
struct item {
struct elem element;
};
und die folgende Funktion:
void init(struct item *wrapper) {
assert(wrapper != NULL);
wrapper->element = NULL;
}
item->element = NULL
ergibt sich eine incompatible types in assignment
. Warum ist das so? Sollte nicht die Einstellung einer struct zu NULL werden, okay?
- Nur Zeiger kann eingestellt werden, um
NULL
. Sie versuchen, auf null ein Objekt ist. - Vielleicht möchten Sie
memset
es auf 0 statt ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C
NULL
ist im Allgemeinen definiert als die folgendenDies bedeutet, dass es einen Zeiger-Wert. In diesem Fall versucht, weisen Sie einen Zeiger (
NULL
) auf einer nicht-Zeiger-Wertitem::element
und immer die entsprechende Nachricht. Wie es scheint, Ihre Absicht zu habenelement
ein Zeiger hier, so versuchen Sie die folgendenmain
bin ich es nicht verwenden. Ich habe gerade nicht wissen, was Sie für den Namen der struct für die Frage hier. Ich werde es umbenennen, hier aber.init
einen Zeiger.wrapper
ist ein Zeiger auf das struct also ich sollte in der Lage sein, um es zu NULL mit->
. Nein?main
dieelement
Feld innerhalb dermain
ist immer noch ein nicht-Zeiger-Typ.NULL
ist ein Zeiger mit dem Wert,wrapper->element
ist nicht ein Zeiger, daher können Sie nicht zuordnenNULL
init
einen Zeiger.wrapper
ist ein Zeiger auf das struct also ich sollte in der Lage sein, um es zu NULL mit->
. Nein?wrapper
- Objekt ist ein Zeiger, der durch einen Wert übergeben wird, oder (in C++ - Fall) ein Verweis, es ändert sich nicht die Mitglieder-Typen übereinstimmenIn Ergänzung zu den bisherigen Antworten, manchmal macht es Sinn, erstellen Sie eine NULL-Struktur.
http://en.wikipedia.org/wiki/Null_Object_pattern
main->element
ist falsch Verwendung. Sie können den Zugriff auf ein Struktur-element unter Verwendung Ihrer Namen. Es solltewrapper->element
. Sie sollten den Zugriff auf die variable name.main
, aberwrapper
.