ホームページ >バックエンド開発 >C++ >C コードで「テンプレート クラス コンストラクターへの未定義の参照」エラーが発生するのはなぜですか?

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

Barbara Streisand
Barbara Streisandオリジナル
2025-01-02 22:36:40294ブラウズ

Why Does My C   Code Produce an

テンプレート クラス コンストラクターへの未定義の参照

この C コードでは、コンパイラはエラー「未定義の cola(float) への参照::」を生成します。コーラ()"。このエラーは、コンパイラがテンプレート クラス cola のコンストラクターの実装を見つけられないために発生します。

回答 1: 明示的なテンプレートのインスタンス化

1 つの解決策は、テンプレートを明示的にインスタンス化することです。 cola.cpp の最後にテンプレート クラス cola を追加し、具象ファイルを強制的にコンパイルします。

template class cola<float>;
template class cola<string>;

回答 2: ヘッダー ファイルの組み込み

あるいは、テンプレート クラスの実装をヘッダー ファイル cola.h に移動することもできます。これにより、ヘッダー ファイルを含むすべての翻訳単位で実装を利用できるようになります。

ヘッダー ファイルを含める理由

実装をヘッダー ファイルに含めると、明示的なインスタンス化の場合。これにより、テンプレート クラスとそのメンバー関数がヘッダー ファイルを含むすべての翻訳単位で利用できることが保証されます。このアプローチは、コードベース全体で広く使用されているテンプレート クラスによく使用されます。

追加の注意事項:

  • テンプレート クラスの実装が 1 つだけ存在することを確認してください。コードベース全体で。
  • テンプレート クラスの実装は、結局クラスでなければなりません定義。
  • テンプレート クラスが複数のヘッダー ファイルで宣言されている場合、実装は、テンプレート クラスが使用される他のすべてのヘッダー ファイルに含まれる別のヘッダー ファイルに配置する必要があります。

以上がC コードで「テンプレート クラス コンストラクターへの未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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