0
1.I做了如下:C++,错误:无效的使用合格的名称
template <class T>
class RBTree{
public:
struct TreeNode{
T data;
bool color;
TreeNode* left;
TreeNode* right;
TreeNode* parent;
static TreeNode* NIL;
TreeNode(T data, TreeNode* parent, TreeNode* left = NIL, TreeNode* right = NIL)
:data(data), color(RED), left(left), right(right), parent(parent){}
}
TreeNode* TreeNode::NIL = new TreeNode(-1, nullptr);
};
而且它抛出我的错误...
[Error] invalid use of qualified-name 'RBTree<T, Comp>::TreeNode::NIL'
我真的不知道为什么...之后我做了全班RBTree,吹塑,它的工作原理之外...
template <class T>
class RBTree{
...
};
template <class T>
typename RBTree<T>::TreeNode* RBTree<T>::TreeNode::NIL = new TreeNode(-1, nullptr);
但我不知道为什么我在第一时间得到了一个错误?
我觉得语法可能是正确的......
2.Soon我做了如下我的课。
//in RBTree.hpp
template <class T>
class RBTree{
public:
... //the same as above
private:
TreeNode* root;
};
template <class T>
typename RBTree<T>::TreeNode* RBTree<T>::TreeNode::NIL = new TreeNode(-1, nullptr);
//in RBTree_IMPL.hpp
template <class T>
void RBTree<T>::insert(const T & data){
if(root == nullptr){
root = new TreeNode(data, nullptr);
...
}
...
}
//in RBTree_test.cpp
int main(){
RBTree<int> rb;
rb.insert(3);
}
我得到了很多错误,像
[Error] recursive evaluation of default argument for 'RBTree<T>::TreeNode::TreeNode(T, RBTree<T>::TreeNode*, RBTree<T>::TreeNode*, RBTree<T>::TreeNode*) [with T = int]'
也许对内部类树节点的构造函数。当我在main()中使用RBTree :: insert()来创建'root'节点时,会发生错误。
我不知道为什么。探测静态成员可能非常有趣。并感谢您阅读我的问题。由于90分钟内只能提出一个问题,所以我在其中写了两个问题...... Thx!
嗯,但第二个问题呢?我添加了插入功能,以使它看起来完成。 – wind2412
@ wind2412:我无法重现该错误。这似乎是错误是关于你没有发布的代码。 –
@ wind2412:错误是在谈论一个带有两个参数的TreeNode构造函数。 –