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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-12 19:58:10734ブラウズ

Why Do I Get

テンプレート クラス コンストラクターの「未定義の参照」 [重複]

テンプレート クラス コンストラクターのコンパイラ エラー「未定義の参照...」は、明示的なインスタンス化の欠如を示しますプログラムで使用される特定のテンプレート クラスの命令。この問題は、明示的に必要になるまでコンパイラがテンプレート コードを自動的にコンパイルしないために発生します。

解決策 1: 明示的なテンプレートのインスタンス化

実装ファイルの最後に明示的なテンプレートのインスタンス化ステートメントを追加します (colaこの場合は .cpp):

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

さらに、次の行をnodo_colaypila.cpp:

template class nodo_colaypila<float>;
template class nodo_colaypila<std::string>;

これにより、コンパイラは必要なテンプレート クラスをコンパイルします。

解決策 2: 実装をヘッダー ファイルに含めます

実装コードを cola から移動します.cpp と nodo_colaypila.cpp を cola.h に変換し、それぞれ、nodo_colaypila.h。これにより、テンプレート クラスを使用してすべての翻訳単位で関数定義を利用できるようになります。

各解決策の長所と短所:

  • 解決策 1:

    • 利点: 必要なテンプレートのみをコンパイルするため、より効率的です。
    • 欠点: 必要なテンプレート クラスごとに手動でインスタンス化する必要があります。
  • 解決策 2:

    • 長所: 将来のテンプレートクラスが可能になるため、より便利で柔軟です
    • 欠点: 各翻訳単位で重複したコードが生成されるため、コンパイルが遅くなる可能性があります。

コード内のその他のタイプミス:

  • cola.h 内のポインター構文が一致しません宣言:
nodo_colaypila<T><T>* ult, pri;

は次のようにする必要があります:

nodo_colaypila<T>* ult, *pri;
  • nodo_colaypila.h の末尾に #endif がありません。
  • nodo_colaypila のデフォルトのパラメーターコンストラクターは実装ではなくヘッダー ファイルで定義する必要がありますファイル。

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

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