第一次使用C++课程,这是怎么回事?
First time using classes in C++, what's going on?
我正在尝试实现自定义树结构,但我得到一个奇怪的输出。
enum letter{B,A,T,G,C,N};
struct Node {
int ltr;
Node* ptr;
};
class GTree
{
public:
GTree(int);
void insert(int);
private:
Node* root;
void insert(int l,Node* leaf);
};
GTree::GTree(int l)
{
root->ltr=l;
}
void GTree::insert(int l, Node *leaf)
{
cout<<leaf->ltr;
}
void GTree::insert(int l)
{
if(root==NULL)
{
insert(l, root);
}
else
{
root= new Node;
insert(l,root);
}
}
int main()
{
GTree tree=GTree(T);
tree.insert(T);
}
输出为-2062064467,尽管我期望是2。这是怎么回事?我正在寻找一个简单的b树实现,但打算将其重新用于我想要的数据结构。
第一次创建GTree对象时没有创建Node对象。
GTree::GTree(int l)
{
root->ltr=l;
}
应该GTree::GTree(int l)
{
root = new Node();
root->ltr=l;
}
同时,确保你有一个析构函数来清理资源。
我觉得我应该指出的另一件事是,GTree::insert(int l, Node *leaf)
可能没有做你期望它做的事情。
cout<<leaf->ltr;
上面的代码只输出节点中的整数值,而不实际赋值。
但也许你还没有完成那部分。: -)
您没有初始化root,因此root->ltr=l;
产生未定义的行为。先添加root = new Node();
我在Ubuntu 12.04和gcc 4.6.3上运行了你的代码,得到了输出0。
相关文章:
- 使用递归的数组的最小值.这是怎么回事
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 绕道重铸瓷砖层是怎么回事
- 架 (U+67B6) 与en_US不符.UTF-8.这是怎么回事?
- R 中的算术在数字上比整数更快。这是怎么回事?
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 弄清楚这段代码是怎么回事(递归下降案例研究)
- 分配器密集和稀疏是怎么回事?
- 传递引用C++,指针的向量.这是怎么回事?
- __vector_base_common是怎么回事?
- (对象)不命名类型.怎么回事
- 变量已在 .obj 中定义;这是怎么回事?
- Sublime上的EasyClangComplete是怎么回事?
- 重复输出的类型是怎么回事,它如何区分迭代次数和 Ascii 代码?
- 标准::地图使用.这是怎么回事?核心转储?我做得不正确?
- llvm libcxx的源代码是怎么回事?
- 这一行是怎么回事: istringstream is( line );
- 第一次使用C++课程,这是怎么回事?