C++ 初始化复杂对象。当我没有';T

C++ 初始化复杂对象。当我没有';T,c++,runtime-error,nodes,access-violation,C++,Runtime Error,Nodes,Access Violation,我似乎不明白为什么每次我对我的节点对象做任何事情时我的程序都会崩溃。我不能取得任何进展,直到这是工作 我的问题是:每当我试图在节点X上“设置数据”时,就会出现访问冲突错误。在此之前,我遇到了一次运行时失败,原因是没有初始化变量。所以我将它初始化为null,但仍然会得到一个错误。我以前的节点类从来没有给过我这个错误,所以我有点不知所措。感谢您的帮助 代码如下: 节点类: #ifndef NODE #define NODE template <typename T> class Nod

我似乎不明白为什么每次我对我的节点对象做任何事情时我的程序都会崩溃。我不能取得任何进展,直到这是工作

我的问题是:每当我试图在节点X上“设置数据”时,就会出现访问冲突错误。在此之前,我遇到了一次运行时失败,原因是没有初始化变量。所以我将它初始化为null,但仍然会得到一个错误。我以前的节点类从来没有给过我这个错误,所以我有点不知所措。感谢您的帮助

代码如下:

节点类:

#ifndef NODE
#define NODE

template <typename T>
class Node
{
public:
    Node();
    Node(T data);
    void SetData(T data);
private:
    T m_Data;

};

template <typename T>
Node<T>::Node()
{

}

template <typename T>
void Node<T>::SetData(T data)
{
    m_Data = data;
}
#endif
#ifndef节点
#定义节点
模板
类节点
{
公众:
Node();
节点(T数据);
无效设置数据(T数据);
私人:
T m_数据;
};
模板
Node::Node()
{
}
模板
void节点::SetData(T数据)
{
m_Data=数据;
}
#恩迪夫
主要内容:

#包括
#包括
#包括“Node.h”
#定义\u CRTDBG\u映射\u ALLOC
int main()
{
_CRTSETDBG标志(_CRTDBG_ALLOC_MEM_DF|u CRTDBG_LEAK_CHECK_DF);
Node*x=nullptr;
x->SetData(20);
返回0;
}
奇怪的是,每当我执行“新建”来分配一个新节点时,这个问题就不会发生。。
提前感谢。

您正在取消对空指针值的引用,这将导致未定义的行为。您需要创建一个
节点的实例
,并将其分配给
x
,如下所示

  Node<int> * x = nullptr;
  x->SetData(20);
Node<int> * x = new Node<int>();
x->SetData(20);

好的,谢谢你的回复!但是,如果我使用局部变量选项,我会因为没有初始化变量而得到一个运行时错误#3。。这个错误听起来像是将局部变量声明为
Node*x而不是
节点xx
声明为指针,则需要创建一个实例并在使用它之前将其分配给
x
。如果要避免内存泄漏,请使用智能指针,如
std::unique\u ptr x
。好的,我现在明白为什么了。非常感谢您的帮助,健忘船长,非常有帮助!好吧,我试着把它变成一个局部变量,但它仍然因为我没有初始化而崩溃..运行时检查失败#3我不明白为什么现在会发生这种情况,当我的最后4-5个项目我可以毫无问题地实例化它们时??感谢响应taocp
  Node<int> * x = new Node<int>();
  x->SetData(20);
Node<int> * x = new Node<int>();
x->SetData(20);
Node<int> x;
x.SetData(20);