c++ - 运行时错误 : Template variable

标签 c++ templates struct global-variables runtime-error

我有一个 struct node 类型的私有(private)变量(请注意,struct 节点有左指针、右指针和父指针以及属性:T 值,其中 T 是模板类型)在一个头文件:

node<T>* root

然后我在 .cpp 文件中有以下方法:

    template<> void RedBlack<int>::setRoot(int elem) {
    root->value=elem;
}

但是,当我尝试在 main 方法中创建该类的实例,然后尝试从那里设置根的值时,出现运行时错误:访问错误。

知道哪里出了问题吗?附言"template"概念仍然很新。

最佳答案

I have a private variable of type struct node in a header file

不,你不知道!你实际拥有的是一个指向 node<T>指针 .它没有指向有效的 node反对,直到你告诉它。如果您尝试取消引用尚未指向有效对象的指针(当您对其执行 -> 时会发生这种情况),则您有未定义的行为。你很幸运,你的环境给了你一个很好的错误。任何事情都可能发生。

您将不得不创建一个 node<T> .如果你的类总是有一个根节点,一种方法是简单地使成员成为 node<T>。 , 而不是 node<T>* .那么根节点就是类的一部分。否则你可以动态分配它,方法是:

root = new node<T>();

但是,不推荐动态分配。你必须记住 delete root;在你的类的析构函数中,否则你可能会导致内存泄漏。它还意味着提供一个用户定义的复制构造函数和赋值运算符来避免泄漏。相反,如果您需要动态分配的 node , 你应该查一下 smart pointers .

关于c++ - 运行时错误 : Template variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806094/

相关文章:

c++ - 二叉树采访: implement follow operation

C++ 不同 -> 和 "."

C++ 静态结构模板方法返回枚举类型

c - 需要给初学者提供链表基本建议

swift - 比较符合协议(protocol)的结构

database - Golang mgo 查找

c++ - visual studio 链接器警告 LNK4098

c++ - 为什么这里不考虑 std::begin/end?

javascript - Django 将数据发送到模板中的 Javascript

c++ - "new"没有在类中调用指定的构造函数?