一组对象作为c ++中函数错误的参数

时间:2012-05-05 01:09:31

标签: c++

我有一个模板化的Node Node,我想创建一个对象数组并将其传递给一个函数。我该怎么做?

Node<char> w1, w2, w3, w4;
Node<char> **s1 = new Node<char>* [3];
s1[0] = &w1; s1[1] = &w2; s1[2] = &w3;
w4.meet_neighbors(s1);

我之前有以下原型:

template<typename T>
void Node<T>::meet_neighbors(Node<T>**);

探测这样做会导致以下错误:

error: no matching function for call to ‘Node<char>::meet_neighbors(Node<char>**&)
note: candidates are: void Node<TW>::meet_neighbors(const Node<TW>**) [with TW = char] <near match>

哪个结果我不明白。请帮忙。

2 个答案:

答案 0 :(得分:2)

这两个函数是不同的,不是因为错误日志 1 中有一个额外的&,而是因为其中一个是const指针,而另一个是不

1 在C ++错误日志中(至少g ++),即使f(int)显示为f(int&)

答案 1 :(得分:0)

你需要做这样的事情:

Node<char>** s1 = new Node<char>*[4];
s1[0] = &w1; s1[1] = &w2; s1[2] = &w3;
w4.meet_neighbors(s1); Node<T>::meet_neighbors(Node<T>**);
/*...*/
delete[] s1;

但你真的应该考虑使用一些STL容器而不是数组,比如std :: vector。您可能会注意到meet_neighbors()函数无法确定数组参数的大小。您需要将一些容器传递给它或添加一个数组大小参数。