我有一个模板化的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>
哪个结果我不明白。请帮忙。
答案 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()
函数无法确定数组参数的大小。您需要将一些容器传递给它或添加一个数组大小参数。