【问题标题】:c++ pointer never initialized still outputs as initializedc ++指针从未初始化仍然输出为初始化
【发布时间】:2017-06-15 08:21:46
【问题描述】:

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

#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;
}

【问题讨论】:

  • 这里可能有几处错误,请将代码也贴在 main 中,以便我们自己查看错误
  • 它是否输出initializeduninitialized。因为您从不初始化 pHead,而是在 if (pHead) 中检查它。
  • 它的输出已初始化,尽管我从未这样做过。
  • 能否请您复制整个输出。

标签: c++


【解决方案1】:

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

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

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

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

【讨论】:

  • 我也会在初始化列表:pHead(nullptr), pTail(nullptr)中使用nullptr
  • @AndreKampling :如果 OP 使用 C++11,是的。
  • 是的,你是对的,但至少使用 NULL 宏会更清楚。但如果他的编译器不支持,他也可以提供自己的nullptr 类型see here at SO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 2021-01-26
相关资源
最近更新 更多