【发布时间】:2013-11-18 01:59:01
【问题描述】:
美好的一天, 我刚开始学习 C++ 中的 void 指针,现在我正在编写二叉树,其中存储在每个节点中的值是指向值的 void 指针。
struct TreeNode
{
int count;
void* data;
TreeNode *left;
TreeNode *right;
};
问题出现在第一个方法添加方法中。 我的方法现在采用 int a 参数并且不返回任何内容 一开始我创建新节点。 为此,我需要将整数转换为 void。 程序编译并且第一个元素正确添加到根目录 - 但是当我向方法发送另一个数字时,它再次存储在根目录中。 所以如果主要我有类似的东西 树.addToTree(12); 树.addToTree(13); 它会先存储 12,然后再存储 else 语句(下面的代码)如何使 root->data i 13.
void Tree::addToTree(int num)
{
if(root==NULL){
root= new TreeNode();
root->data=#
//((int *)(root->data)) = num;//i tried to convert to void* in this way but it give me segmentation fault
root->left=NULL;
root->right=NULL;
}
else{
//here root value is already changed
int *intPtr = static_cast<int*>(root->data);
cout << "key2" << *intPtrT << endl;
//TreeNode* current= insert(num,root);
}
}
据我了解,那是因为我使用 &num,所以我的参数总是在一个地方撕裂,并且根“连接”到 &num 它也会改变。
我试图找到解决方案,但没有成功。 有没有办法 cat int 来做空指针?
【问题讨论】:
-
您没有将指向 void 的指针转换为 int。您正在将其转换为指向 int 的 指针。
-
((int *)(root->data)) = num无法编译。必须是((int *)(root->data)) = &num或*((int *)(root->data)) = num。是哪一个? -
感谢您的回答。他们非常有帮助。我使用了“new int(num)”-它有效。关于模板 - 肯定会更有效,但我现在是一名学生,我的作业清楚地表明我们需要使用 void ,正如我所说的那样,我不是很合理)
标签: c++ casting void-pointers