使指针成为全局C ++

时间:2012-04-23 02:24:30

标签: c++ pointers binary-search-tree

我使用根指针构建了二叉树。

是不是所有函数都应该更改根指针,因为我声明它是全局的?我如何实现这一目标?

由于

//伪代码(左,右指针在其他地方声明)

Node * root = new Node;


Node * BST::BuildTree(int label)
{
         root->left = changed;
        root->right = changed;
}

Node * BST::GetNode(int label)
{


  BTNode *ptr = root;

  cout << root->right;  //This gives me a seg fault since root is still NULL and not changed
}

1 个答案:

答案 0 :(得分:3)

这是因为您尚未在代码中为root分配有效地址。

它应该指向一个有效的节点:

void BST::CreateRoot()
{
  root = new (std::nothrow) Node;
}

在C ++中,当你想使用“全局变量”时,你应该使用unnamed namespace。好处是它可以防止名称冲突,这些冲突很容易被全局变量引入。

namespace
{
  Node * root = NULL;
}

如果你用C编码,我最终会在这里。但是既然你正在使用C ++,那还有一件事。

你应该尽力avoid using global variables,特别是当你有很多相互依赖的时候。通常,您可以创建单例类。

但我不认为你使用单身人士的情况很复杂。只需在函数中添加一个额外的输入参数即可指示您要操作的节点。

// @param1(node) can be root or whatever node you want
Node * BST::BuildTree(Node *node, int label)
{
  node->left = changed;
  node->right = changed;
}