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構造函數。 –