2017-06-15 2 views
0

Alles, was ich tue, ist ein Zeiger deklarieren und dann, wenn seine zeigt auf etwas Überprüfung:C++ Zeiger nie noch initialisiert gibt so initialisiert

#pragma once 

#include <Node.h> 
#include <stdio.h> 

template <class NodeDataType> 
class LinkedList 
{ 
typedef Node<NodeDataType>* pNode; 

private:  
pNode pHead; 


pNode pTail; 



public: 

void Add(NodeDataType* pNodeTypeData) 
{ 


    if(pHead) 
    { 
     printf("phead is initialized\n"); 
    } 
    else 
    { 
     printf("phead is not initialized\n"); 

    }    
} 


}; 

dann in main(), ich bin ein neues LinkedList-Objekt zu machen und ruft Add aber wenn ich es ausführe, gibt es pHead is initialized aus? aber ich habe es nie initialisiert?

kann mir jemand das erklären?

dank

(Haupt)

#include <stdio.h> 
#include <LinkedList.h> 
#include <GameObject.h> 

int main(int argc, char** argv) 
{ 

LinkedList<GameObject> meList; 


meList.Add(new GameObject()); 


return 0; 
} 
+0

Es kann mehrere Dinge hier falsch sein, bitte den Code in Main Post auch so dass wir den Fehler für uns selbst sehen können – Curious

+2

Blick auf diese https://stackoverflow.com/questions/1910832/why-arent-pointers-initialized-with-null-by-default –

+0

Gibt es outputs "initialisiert" oder "nicht initialisiert '. Weil Sie "pHead" niemals initialisieren, sondern "if (pHead)" einchecken. –

Antwort

1

Sie pHead oder pTail in Konstruktor oder an Ort und Stelle nicht initialisiert werden. Diese Elemente haben also willkürliche Werte, wenn Sie ein Objekt LinkedList erstellen. Also, entweder schreiben den Konstruktor:

LinkedList() 
    :pHead(NULL), pTail(NULL) 
{ 
} 

Oder initialisieren sie an Ort und Stelle, wenn Sie C++ verwenden 11:

private:  
    pNode pHead = nullptr; 
    pNode pTail = nullptr; 
+0

Ich würde auch 'nullptr' in der Initialisierungsliste' verwenden: pHead (nullptr), pTail (nullptr) '. –

+0

@AndreKampling: Wenn OP C++ 11 verwendet, ja. – nakiya

+1

Ja sicher, dass Sie Recht haben, aber die Verwendung mindestens des 'NULL'-Makros wäre dann klarer. Er könnte aber auch einen eigenen 'nullptr'-Typ [siehe hier bei SO] (https://stackoverflow.com/a/44517878/8051589) angeben, wenn sein Compiler dies nicht unterstützt. –

Verwandte Themen