2017-06-15 36 views
0

所有我做的是声明指针,然后检查是否它指向什么:C++指针永远不会初始化还是输出作为初始化

#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"); 

    }    
} 


}; 

然后,在main(),我想提出一个新的LinkedList对象,并调用Add 但是当我运行它时,它输出pHead is initialized? 但我从来没有初始化它?

有人可以解释给我吗?

感谢

(主)

#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

可以有几件事情错在这里,请张贴代码主要还以便我们可以看到自己的错误 – Curious

+2

看看这个https://stackoverflow.com/questions/1910832/why-arent-pointers-initialized-with-null-by-default –

+0

它是否输出'initialized'或'uninitialized '。因为你永远不会初始化'pHead',而是在'if(pHead)'中检查它。 –

回答

1

你不会在构造函数或代替初始化pHeadpTail。因此,当您创建一个LinkedList对象时,这些成员将具有任意值。所以,要么写构造函数:

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

或者,如果你使用的是C++ 11就地对它们进行初始化:

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

我也会在初始化列表':pHead(nullptr),pTail(nullptr)'中使用'nullptr'。 –

+0

@AndreKampling:如果OP使用C++ 11,是的。 – nakiya

+1

是的,你确定你是对的,但至少使用'NULL'宏会更清晰。但是如果他的编译器不支持它,他也可以提供一个自己的'nullptr'类型[在这里看到](https://stackoverflow.com/a/44517878/8051589)。 –