ホームページ >バックエンド開発 >C++ >「テンプレート クラス コンストラクターへの未定義の参照」が表示されるのはなぜですか?それを修正するにはどうすればよいですか?

「テンプレート クラス コンストラクターへの未定義の参照」が表示されるのはなぜですか?それを修正するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-09 19:57:15542ブラウズ

Why Do I Get

なぜ「テンプレート クラス コンストラクターへの未定義の参照」があるのですか?

テンプレート クラスは、さまざまな型のクラスを作成するためのブループリントを定義します。テンプレート クラスを使用するには、特定の型でインスタンスを作成する必要があります。あなたの場合、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。