1

テンプレート化されたクラス 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>

どの結果が私には理解できません。助けてください。

4

2 に答える 2

2

2 つの関数が異なるのは&、エラー ログ1に追加があるためでconstはなく、一方がポインターであり、もう一方がそうでないためです。

1 C++ エラー ログ (少なくとも g++) ではf(int)f(int&).

于 2012-05-05T12:19:35.597 に答える
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;

ただし、std::vector など、配列の代わりにいくつかの STL コンテナーを使用することを検討する必要があります。meet_neighbors()関数が配列引数のサイズを決定できないことに気付くかもしれません。コンテナーを渡すか、配列サイズの引数を追加する必要があります。

于 2012-05-05T01:21:12.667 に答える