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);
}
私は内部クラスのTreeNodeのコンストラクタについて多分
[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分で1つの質問しかできないという事実のために、私はそれに2つの質問を書いています。
umしかし、2番目の質問はどうですか?私はそれが完了したようにするために挿入機能を追加しました。 – wind2412
@ wind2412:私はそのエラーを再現できません。エラーはあなたが投稿しなかったコードに関するものだと思われます。 –
@ wind2412:このエラーは、2つの引数を取るTreeNodeコンストラクタについてのものです。 –