我有一个 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/