2016-07-29 13 views
0

Ich bin sehr neu für Template-Klasse und Template-Funktion. Dieses Mal habe ich versucht, meine eigene Nullable-Klasse zu erstellen, die jedem Objekt erlaubt, einen Wert oder Nullwert zu haben.C++ Zeiger als Mitglied der Template-Klasse

template<typename _Type> 
class Nullable 
{ 
private: 
    _Type *_Pointer 
public: 
    Nullable::Nullable(const _Type &x) 
    { 
     this->_Pointer = new _Type(x); 
    }; 

Wenn jedoch I kompilieren, gibt sie mir 2 Fehler:

  • C2059: Syntaxfehler: 'this'
  • C2238: unerwartetes Token (n) vorangehenden ';'

an der Linie des Konstruktors über.

mir also bitte erklären, wie man einen Konstruktor richtig für Template-Klasse zu schreiben. Und wird empfohlen, Pointer als Mitglied der Template-Klasse zu verwenden? Vielen Dank im Voraus.

+0

Wenn Sie syntaktisch Inline-Funktionen, der Namensraum der Klasse, die Sie in sind, wird implizit hinzugefügt, so dass Sie versuchen, Nullable :: Nullable :: Nullable zu definieren. – xaxxon

+0

Eine andere Sache zu denken ist, die sich für diesen Speicher verantwortlich ist, dass Sie in Ihrem Konstruktor Zuteilung, da die Klasse reinigt es nicht auf. Ich würde empfehlen, stattdessen einen Rohzeiger zu verwenden, verwenden std :: unique_ptr <_Type> statt, so dass der Speicher automatisch gereinigt wird, wenn Ihr Nullable Objekt zerstört wird. – xaxxon

Antwort

3

Problem 1

Du eine ; in der Zeile fehlt:

_Type *_Pointer; 
       ^^ missing 

Problem 2

Wenn ein Konstruktor inline definiert ist, können Sie nicht den Umfang nutzen Operator.

ändern

Nullable::Nullable(const _Type &x) { ... } 

zu

Nullable(const _Type &x) { ... } 

A nitpick

Sie brauchen nicht die ; am Ende des Konstruktordefinition.

Nullable(const _Type &x) 
{ 
    this->_Pointer = new _Type(x); 
}; 
^^ Remove it. 

Es ist kein Fehler, es dort zu haben, aber es wird nicht benötigt.

+0

Wow, danke, es funktioniert jetzt perfekt. Entschuldigung für das Fehlen des ';' : D –

+0

@TrianEtymes, Sie sind willkommen. –