pure virtual deklaration
-
Die zweite Variante ist schlicht falsch, und wird beispielsweise vom gcc gar nicht erst akzeptiert. Eine rein virtuelle Funktion ist kein Nullpointer!
-
theta schrieb:
= 0 ist korrekt!
Je nachdem was NULL ist (muss nicht immer 0 sein) funktioniert das nicht.Und was dann? In C++ darf es zum Beispiel nicht
(void*)0sein. Der Standard macht den Vorschlag 0 oder 0L. Es muss ein Wert sein, welche zu einem Zeiger implizit konvertierbar ist.Gut theoreitsch könnte man
NULLauch mitnullptrgleichsetzen, da es allerdings aus einem C Header herauskommt, halte ich dies für etwas unwahrscheinlich. Ausser es gäbe eine Kompilererweiterung oder sowas.Aber grundsätzlich hast du natürlich schon recht.
= NULList für Zeiger vorgesehen und nicht für pure virtual. Daher ist meiner Meinung nach auch nur= 0wirklich korrekt. Ich habe ehrlich gesagt auch noch nie ein= NULLgesehen.dooooomi schrieb:
Die zweite Variante ist schlicht falsch, und wird beispielsweise vom gcc gar nicht erst akzeptiert. Eine rein virtuelle Funktion ist kein Nullpointer!
Rein aus Interesse: Mit welcher Fehlermeldung?
Grüssli
-
Dravere schrieb:
Gut theoreitsch könnte man
NULLauch mitnullptrgleichsetzen, da es allerdings aus einem C Header herauskommt, halte ich dies für etwas unwahrscheinlich. Ausser es gäbe eine Kompilererweiterung oder sowas.Dir ist schon klar dass
#define NULL 0
auch aus einem "C Header" kommt obwohl es in C "((void*)0)" sein muss?Mit dem neuem C++ standard hat man ja sowieso NULL als nullptr.
der gcc wird vermutlich schon nullptr können und deshalb nen fehler ausspucken.
-
Shade Of Mine schrieb:
Dravere schrieb:
Gut theoreitsch könnte man
NULLauch mitnullptrgleichsetzen, da es allerdings aus einem C Header herauskommt, halte ich dies für etwas unwahrscheinlich. Ausser es gäbe eine Kompilererweiterung oder sowas.Dir ist schon klar dass
#define NULL 0
auch aus einem "C Header" kommt obwohl es in C "((void*)0)" sein muss?Ehm, ja, ist mir klar. Habe ich doch auch geschrieben?
3Grüssli
-
Dravere schrieb:
Ehm, ja, ist mir klar. Habe ich doch auch geschrieben?
3Was meinst du dann mit
da es allerdings aus einem C Header herauskommt, halte ich dies für etwas unwahrscheinlich
?
-
Shade Of Mine schrieb:
Was meinst du dann mit
da es allerdings aus einem C Header herauskommt, halte ich dies für etwas unwahrscheinlich
?
Dass ich es für unwahrscheinlich halte, dass im C Header
cstddeffolgendes steht:#define NULL nullptrUnd dabei die
nullptrImplementation aus dem verlinkten Thread verwendet wird (also eine C++ Klasse). Ich könnte mir höchstens vorstellen, dass sowas drin steht:#define NULL __xxx_compiler_nullptrAlso irgendeine Kompilererweiterung, bzw. Schlüsselwort.
Grüssli
-
Dravere schrieb:
Rein aus Interesse: Mit welcher Fehlermeldung?
error: invalid pure specifier (only `= 0' is allowed) before ‘;’ token
-
dooooomi schrieb:
Dravere schrieb:
Rein aus Interesse: Mit welcher Fehlermeldung?
error: invalid pure specifier (only `= 0' is allowed) before ‘;’ token
Hmmm, jo. Hab es vorhin schnell nachgeschaut. Der GCC hat ein
__nullSchlüsselwort und verwendet auch dieses fürNULL. Wobei allerdings auch in C++ 0 und in C((void*)0)verwendet werden könnte. Allerdings habe ich nicht so ganz verstanden, wann jetzt__GNUG__gesetzt ist und wann nicht. Aber ist eigentlich auch egal
Danke.
Grüssli
-
Dravere schrieb:
Dass ich es für unwahrscheinlich halte, dass im C Header
cstddeffolgendes steht:#define NULL nullptrUnd dabei die
nullptrImplementation aus dem verlinkten Thread verwendet wird (also eine C++ Klasse). Ich könnte mir höchstens vorstellen, dass sowas drin steht:#define NULL __xxx_compiler_nullptrAlso irgendeine Kompilererweiterung, bzw. Schlüsselwort.
Ich sehe nicht was das mit C Headern zu tun hat. Und ich sehe auch kein problem mit nullptr an der Stelle.
Natürlich wird das erst langsam kommen, aber irgendwann wird NULL überall mit nullptr definiert sein.
ich habe gerade keinen gcc bei der hand, aber ich denke der neue wird nullptr schon können. der vc++ kennt nullptr zb schon, tut es aber nicht als #define NULL nullptr nutzen

auf lange sicht wird das aber der fall sein.
-
Shade Of Mine schrieb:
Ich sehe nicht was das mit C Headern zu tun hat. Und ich sehe auch kein problem mit nullptr an der Stelle.
NULLkommt aus dem C Headercstddef. Also mit C hat es durchaus was zu tun. Allerdings stand ich gestern irgendwie auf dem Schlauch. Man kann natürlich im Headerstddef.hein#ifdef __cpluplusverwenden oder im Headercstddefein#undef NULLund dann ein neues#define NULL
Also mit C Headern hat es schon was zu tun, die Aussage ist aber ansonsten NULL-wertig

Grüssli
-
Dravere schrieb:
Also mit C hat es durchaus was zu tun.
Nur dem Namen nach und weil cstddef aus Kompatibilitätsgründen zur C-Bibliothek in den Standard übernommen wurde.
Man kann natürlich im Header
stddef.hein#ifdef __cpluplusverwenden oder im Headercstddefein#undef NULLund dann ein neues#define NULL
Oder cstddef bindet stddef.h garnicht ein, das wird afaik nicht vom Standard verlangt...
-
@pumuckl,
Hast du schon mal eine Implementation voncstddefgesehen, welche nichtstddef.hinkludiert hat? Aber klar, man könnte auchcstddefin C++ implementieren undstddef.hnicht verwenden. Trotzdem ist es ein C Header, wenn es auch nur ein Name ist. Allerdings wie gesagt, ich stand komplett auf dem Schlauch.Übrigens nicht nur hier, sondern auch bei meiner Kaffeemaschine. Wollte mir am Abend einen Kaffee rauslassen und da kam einfach nichts raus, bzw. der Motor sprang nicht mal an. Volle Panik geschoben, bis ich nach langem suchen bemerkt habe, dass ich keine Kaffee-Kapsel eingelegt hatte...

Grüssli
-
Dein Punkt macht keinen Sinn.
Denn wenn ich in C++ cstddef inkludiere ist NULL 0, wenn ich in C stddef.h inkludiere ist NULL ((void*)0).
Es gibt also standardmäßig eine Spezialbehandlung. Da ist es absolut kein Problem statt
#ifdef __cplusplus #define NULL 0ein
#ifdef __cplusplus #define NULL nullptrzu machen...
-
Shade Of Mine schrieb:
Dein Punkt macht keinen Sinn.
Schön, dass du dies auch noch bemerkst. Ich habe es nun schon ca. 2 mal selber hingeschrieben

Grüssli