2012-04-02 9 views
0

ich versuche dem buch zu folgen Datenstrukturen und problemlösung mit C++, von weiss.eine konstante referenz in C++ implementieren (nach dem weiss-buch)

Ich versuche, auf konstante Referenzklasse zu arbeiten, so wie das Buch sagt, aber es hält mich kompilieren Fehler.

Update: Ich habe den Code geändert, aber einige der alten Fehler bestehen weiterhin.

//Class that wraps a constant reference variable. 
//useful for return values from a container find method. 
#include <iostream> 
using namespace std; 

class NullPointerException: public exception{ 

}; 

template <class Object> 
class Cref{ 
    public: 
    Cref() : obj(NULL){} 
    explicit Cref(const Object & x): obj(&x){ } 

    const Object & get() const{ 
     if(isNull()){ 
      throw NullPointerException(); 
     } 
     else{ 
      return *obj; 
     } 
    } 
    bool isNull() const{ 
     return obj == NULL; 
    } 

private: 
    const Object* obj; //stores a pointer... 

};

// Anwendungsbeispiel:

Klasse Testclass { int-Test;

public: 
    TestClass():test(10){} 

    int& get(bool valid){ 
     if(valid){ 
      Cref<int> retv(test); 
      return retv; 
     } 
     else{ 
      Cref<int> retv; 
      return retv; 

     } 
    } 

};

int main(){ 
    TestClass temp; 
    try{ 
     Cref<int> test = temp.get(true); 
     Cref<int> test2 = temp.get(false); 
    } 
    catch(exception& e){ 
     cout<<"NULL pointer exception occurred"<<endl; 
    } 

} 

3_ConstRef.cpp: In member function ‘int& TestClass::get(bool)’: 
3_ConstRef.cpp:44:12: error: invalid initialization of reference of type ‘int&’ from expression of type ‘Cref<int>’ 
3_ConstRef.cpp:48:12: error: invalid initialization of reference of type ‘int&’ from expression of type ‘Cref<int>’ 
3_ConstRef.cpp: In function ‘int main()’: 
3_ConstRef.cpp:59:33: error: conversion from ‘int’ to non-scalar type ‘Cref<int>’ requested 
3_ConstRef.cpp:60:35: error: conversion from ‘int’ to non-scalar type ‘Cref<int>’ request 

ed

Wie löse ich diese Probleme? (ps:? Ist es wegen der falschen Umsetzung oder der falschen Verwendung)

Danke:)

+0

Was ist die 'NullPointerException' Definition? Wir wissen es nicht. Und Sie haben keinen Header eingefügt, der es enthalten könnte. – jweyrich

+0

... Ich dachte, es wäre ein C++ - Schlüsselwort, wenn mein Gedit es gefärbt hat ... also muss ich es selbst definieren ??? oder muss ich mehr Header-Dateien hinzufügen? – user269334

+0

oh es tut mir leid, es war nicht (und die Färbung ist nicht passiert) Ich denke, ich muss es selbst implementieren – user269334

Antwort

0

3_ConstRef.cpp: In member function ‘const Object& Cref<Object>::get() const’: 3_ConstRef.cpp:15:33: error: there are no arguments to ‘NullPointerException’ that depend on a template parameter, so a declaration of ‘NullPointerException’ must be available [-fpermissive]

NullpointerException auf Ihrer Vorlage Argumenten nicht abhängig ist, so sollte es eine globale Erklärung sein der Funktion. Es scheint, dass Sie einige Header verpasst haben. Siehe diesen Link für weitere Informationen:

http://gcc.gnu.org/onlinedocs/gcc/Name-lookup.html

3_ConstRef.cpp: In member function ‘int& TestClass::get(bool)’: 3_ConstRef.cpp:41:12: error: invalid initialization of reference of type ‘int&’ from expression of type ‘Cref<int>’ 3_ConstRef.cpp:45:12: error: invalid initialization of reference of type ‘int&’ from expression of type ‘Cref<int>’

In TestClass::get() Sie versuchen, ein Objekt vom Typ zurückzukehren Cref<int> aber der Rückgabetyp ist int&. Es ist nicht ratsam, zurückzukehren, um eine Referenz eines lokalen Objekt zurückgeben, finden Sie diese Frage SO:

C++ function return reference

+0

Ich habe gerade den Fehler gelöst (indem ich den NULLPOINTEREXCEPTION innerhalb des Codes definiere), aber danke trotzdem:) – user269334

Verwandte Themen