0

我很好奇如何实现这样的功能。例如,

我有类似的东西:

class Node {
public:
int dataItem;
Node *next;
};

void foo(int number, Node & n) {
// do something
}

然后在 main 我需要调用该函数,这样的事情不起作用:

int main () {
Node *n;
int data;
foo(data, n);
return 0;
}

我将需要一个包装函数,以便在 main 中通过引用传递节点,这就是我正在努力的地方,我只是不确定如何解决这个问题。我尝试了一些想法,我在网上阅读了很多,但我只是没有掌握它。任何帮助理解如何实现这个包装函数都会很棒。

4

2 回答 2

4

你根本没有Node。你只是有一个指针Node,它还没有特别指向任何地方(你data也没有初始化)。类型的引用参数Node&要求您传递 a Node,而不是 a Node*,所以您真正想要的是:

int main() {
  Node n;
  int data = 0;
  foo(data, n); // Pass the Node directly
  return 0;
}

或者,如果您确实需要n成为指针,则可以执行以下操作:

int main() {
  Node* n = new Node();
  int data = 0;
  foo(data, *n); // Dereference n to get the Node it points to
  delete n;
  return 0;
}

但是,我不提倡在这种情况下使用原始指针——你必须记住要delete避免内存泄漏。您可以改为使用std::unique_ptr<Node> n(new Node())而不是Node* n = new Node(),但使用Node具有自动存储持续时间的 (如第一个示例中所示)是更可取的。

于 2012-12-01T18:03:51.767 回答
1

您的函数foo需要对 a 的引用Node,但您正在向它传递一个指针。main()例如,更改函数或代码

int main () {
Node n;
int data; // beware, may contain garbage value.
foo(data, n);
return 0;
}

或者

void foo(int number, Node* n) {
// do something
}
于 2012-12-01T18:04:50.827 回答