C++ c++;指针从未初始化,但输出仍为已初始化

C++ c++;指针从未初始化,但输出仍为已初始化,c++,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

我所做的只是声明一个指针,然后检查它是否指向任何东西:

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

    }               
}


};

您不能在构造函数中或就地初始化
pHead
pTail
。因此,当您创建
LinkedList
对象时,这些成员将具有任意值。因此,要么编写构造函数:

LinkedList()
    :pHead(NULL), pTail(NULL)
{
}
或者,如果您使用的是c++11,请就地初始化它们:

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

这里可能有几处错误,请在main中发布代码,以便我们自己查看错误。请查看它是否输出
已初始化
未初始化
。因为你从来没有初始化过pHead,而是在if(pHead)中检查它。它输出初始化,即使我从来没有这样做过。请你复制整个输出。我也会在初始化器列表中使用
nullptr
:pHead(nullptr),pTail(nullptr)@anderkampling:if OP使用C++11,是的。是的,当然你是对的,但至少使用
NULL
宏会更清晰。但如果他的编译器不支持,他也可以提供自己的
nullptr
类型。
private:    
    pNode pHead = nullptr;
    pNode pTail = nullptr;