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.


Anmelden zum Antworten