なぜ「テンプレート クラス コンストラクターへの未定義の参照」があるのですか?
テンプレート クラスは、さまざまな型のクラスを作成するためのブループリントを定義します。テンプレート クラスを使用するには、特定の型でインスタンスを作成する必要があります。あなたの場合、nodo_colaypila と cola という 2 つのテンプレート クラスがあります。
ただし、コンパイラーは、コードをコンパイルする前に、インスタンス化されたクラスのコンストラクターについて知る必要があります。特定の型でテンプレート クラスを明示的にインスタンス化していないため、コンパイラはどのコンストラクタを含めるべきかわかりません。
2 つの解決策:
次の 2 つの方法があります。この問題を解決します:
解決策 1: 明示的なテンプレートインスタンス化
cola.cpp の最後に明示的なテンプレートのインスタンス化を追加します。
template class cola<float>; template class cola<string>;
すべてのテンプレート定義が 1 つの翻訳単位 (.cpp ファイル) 内にあり、明示的なインスタンス化が行われていることを確認します。
解決策 2: コードをヘッダーに移動するファイル
メンバー関数を実装するコードを cola.cpp および nodo_colaypila.cpp から対応するヘッダー ファイル .h に移動します。これにより、これらのヘッダーを含むすべての翻訳単位で関数実装が使用できるようになります。
概要:
明示的なテンプレートのインスタンス化アプローチにより、特定の型のインスタンス化を制御できます。 。 「コードをヘッダー ファイルに移動」アプローチが一般的に使用され、すべての翻訳単位で実装を利用できるようになります。どちらを選択するかは、特定のニーズとプロジェクトの要件によって異なります。
以上が「テンプレート クラス コンストラクターへの未定義の参照」が表示されるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。