ホームページ > バックエンド開発 > C++ > C テンプレートによって「未解決の外部シンボル」リンカ エラーが発生するのはなぜですか?

C テンプレートによって「未解決の外部シンボル」リンカ エラーが発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-05 13:04:41
オリジナル
809 人が閲覧しました

Why Do C   Templates Cause

テンプレートによって「未解決の外部シンボル」エラーが発生するのはなぜですか?

テンプレートを使用して C コードを開発する場合、リンク中に「未解決の外部シンボル」エラーが発生することがよくあります。この問題は、テンプレート化されたクラスと関数が、通常は別のソース ファイル (.cpp) で使用されるまでインスタンス化されないために発生します。

テンプレートを使用すると、コンパイラはその関数を構築するための完全なコードを要求します。適切なタイプの正しい関数。ただし、関数のコードはテンプレートのソース ファイルに含まれているため、使用できません。

そのため、コンパイラは関数が別の場所で指定されていると想定し、その呼び出しのみを含めます。テンプレートのソース ファイルをコンパイルすると、プログラム ソースの特定のテンプレート タイプが利用されないため、重要な関数コードの生成に失敗します。これにより、未解決の外部シンボル エラーが発生します。

問題の解決方法:

  1. テンプレートのヘッダーにメンバー関数の定義を含めます: メンバー関数を定義します別のソース ファイルを作成する代わりに、テンプレートのヘッダー ファイルに追加します。これにより、コンパイラは、プログラム ソース内の型付き関数のコンパイル中に、関数の完全なコードにアクセスできるようになります。
  2. テンプレートのソース内のすべてのメンバー関数をインライン化します: これは廃止されました。最新バージョンの Visual Studio (2017 ) で推奨されます。
  3. テンプレートの "export" キーワードを使用してください。ソース: 「export」キーワードを使用して、テンプレートのソースでメンバー関数を定義します。ただし、このアプローチはコンパイラでは広くサポートされておらず、C 11 では非推奨になりました。

以上がC テンプレートによって「未解決の外部シンボル」リンカ エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート