2017-06-15 86 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)。 –