C コンパイル エラー:「未定義の参照」を解決するにはどうすればよいですか?
はじめに:
C でプログラミングしている場合、「未定義の参照」のようなコンパイル エラー メッセージが表示されることがあります。このタイプのエラーは通常、リンク エラーが原因で発生します。このエラーは、コンパイラがリンク プロセス中に関連する関数または変数の定義を見つけられないことが原因で発生します。この記事では、いくつかの一般的な原因と解決策を紹介し、コード例を使用して読者がそのような問題をよりよく理解して解決できるようにします。
1. 原因分析:
2. 解決策:
1. 関数/変数の定義と宣言を確認します: まず、大文字と小文字の区別に特に注意して、関数/変数の名前のスペルが正しいことを確認します。次に、パラメータの型や戻り値の型など、関数/変数の宣言と定義が一致しているかどうかを確認します。関数/変数が他のソース ファイルで定義されている場合は、必ず正しいヘッダー ファイルを参照し、ソース ファイルをコンパイルしてリンクしてください。
サンプル コード 1:
// File1.cpp #include "MyClass.h" void foo(); int main() { foo(); return 0; } // File2.cpp #include <iostream> #include "MyClass.h" void foo() { MyClass obj; obj.bar(); } // MyClass.h class MyClass { public: void bar(); };
上記のサンプル コードでは、File1.cpp
に MyClass
という名前のクラスを定義しました。 # という名前の関数##foo() が呼び出され、
foo() 関数の定義が
File2.cpp に実装されます。
MyClass クラスは
MyClass.h ヘッダー ファイルで宣言されていることに注意してください。
File1.cpp および
File2.cpp をコンパイルするときに「'foo()' への未定義の参照」エラーが発生した場合は、
foo() 関数を確認する必要があります。宣言と定義が一貫しているかどうかを確認し、
MyClass.h ヘッダー ファイルが正しく参照されていることを確認してください。
// File1.cpp #include "File2.h" void foo(); int main() { foo(); return 0; } // File2.h void foo(); // File2.cpp #include "File2.h" void foo() { // do something }
File1.cpp は
File2.cpp で定義された
foo に依存します ( )###関数。コンパイル中に「'foo()' への未定義の参照」エラーが発生した場合は、File2.cpp
のコンパイル順序が正しいかどうかを確認する必要があります。これら 2 つのファイルを正しい順序でコンパイルすることができます。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>g++ -o main File2.cpp File1.cpp</pre><div class="contentsignin">ログイン後にコピー</div></div>
または、コンパイル時にリンク順序を指定します:
g++ -o main File1.cpp File2.cpp
さらに複雑な状況が発生する可能性があるため、決定する必要があることに注意してください。特定の状況に応じて調整します。
結論:
C プログラミングでは、「未定義の参照」エラーは一般的なリンク エラーです。このエラーを解決するときは、関数/変数の定義と宣言を再確認して、それらの名前のスペルが正しく、スコープが正しいことを確認する必要があります。複数のソース ファイルの場合は、リンクの順序が正しいかどうかを特に確認する必要があります。上記の解決策とサンプルコードを通じて、読者はそのようなエラーをよりよく理解して解決し、プログラミングの効率を向上させることができると思います。以上がC++ コンパイル エラー:「未定義の参照」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。