Fehler in NullPtr Klasse?
-
Hallo.
Scott Meyers hat in 'Effektiv C++ Programmieren' eine NullPtr-Klasse vorghestellt.
Als ich heute versucht habe sie einzusetzten bekam ich einen Laufzeitfehler:// NULL.h #ifdef NULL #undef NULL #endif const class NullPtr { void operator &() const; public: template <class T> operator T*() const { return 0; } template <class C, class T> operator T C::*() const { return 0; } } NULL; // main.cpp #include <iostream> using namespace std; #include "NULL.h" void foo(int val) { cout << val << endl; } void foo(char* val) { cout << val << endl; } int main() { int value1 = 9; char* value2 = "Hallo"; foo(value1); foo(value2); foo(NULL); // Laufzeitfehler: Wert von val ist 'Schlechtes Ptr*' // -> strlen erzeut Laufzeitfehler return 0; }
Kann mir jemand bitte sagen was da der Fehler ist?
Warum ist 0x00000000 nicht korrekt als 'Null-Wert'?Mit
#define NULL 0
gehts.
-
Wieso wundert dich das? cout << (char*)0 führt eben nunmal zum Absturz.