pure virtual deklaration


  • Administrator

    Shade Of Mine schrieb:

    Dravere schrieb:

    Gut theoreitsch könnte man NULL auch mit nullptr gleichsetzen, 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? 😕3

    Grüssli



  • Dravere schrieb:

    Ehm, ja, ist mir klar. Habe ich doch auch geschrieben? 😕3

    Was meinst du dann mit

    da es allerdings aus einem C Header herauskommt, halte ich dies für etwas unwahrscheinlich

    ?


  • Administrator

    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 cstddef folgendes steht:

    #define NULL nullptr
    

    Und dabei die nullptr Implementation 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_nullptr
    

    Also 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


  • Administrator

    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 __null Schlüsselwort und verwendet auch dieses für NULL . 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 cstddef folgendes steht:

    #define NULL nullptr
    

    Und dabei die nullptr Implementation 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_nullptr
    

    Also 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.


  • Administrator

    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.

    NULL kommt aus dem C Header cstddef . Also mit C hat es durchaus was zu tun. Allerdings stand ich gestern irgendwie auf dem Schlauch. Man kann natürlich im Header stddef.h ein #ifdef __cpluplus verwenden oder im Header cstddef ein #undef NULL und 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.h ein #ifdef __cpluplus verwenden oder im Header cstddef ein #undef NULL und dann ein neues #define NULL 🙄

    Oder cstddef bindet stddef.h garnicht ein, das wird afaik nicht vom Standard verlangt...


  • Administrator

    @pumuckl,
    Hast du schon mal eine Implementation von cstddef gesehen, welche nicht stddef.h inkludiert hat? Aber klar, man könnte auch cstddef in C++ implementieren und stddef.h nicht 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 0
    

    ein

    #ifdef __cplusplus
    #define NULL nullptr
    

    zu machen...


  • Administrator

    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


Anmelden zum Antworten