ホームページ > バックエンド開発 > C++ > C++ コンパイル エラー:「未定義の参照」を解決する方法?

C++ コンパイル エラー:「未定義の参照」を解決する方法?

WBOY
リリース: 2023-08-26 22:06:25
オリジナル
3784 人が閲覧しました

如何解决C++编译错误:\'undefined reference to\'?

C コンパイル エラー:「未定義の参照」を解決するにはどうすればよいですか?

はじめに:
C でプログラミングしている場合、「未定義の参照」のようなコンパイル エラー メッセージが表示されることがあります。このタイプのエラーは通常、リンク エラーが原因で発生します。このエラーは、コンパイラがリンク プロセス中に関連する関数または変数の定義を見つけられないことが原因で発生します。この記事では、いくつかの一般的な原因と解決策を紹介し、コード例を使用して読者がそのような問題をよりよく理解して解決できるようにします。

1. 原因分析:

  1. 未定義の関数/変数: 関数または変数を使用する場合、コード内に対応する定義が見つからない場合、「未定義」と表示されます。エラー。これは、関数/変数名のスペルミス、一貫性のない関数/変数の宣言または定義、関数/変数が正しく含まれていないなどが原因である可能性があります。
  2. 間違ったリンク順序: コード内に複数のソース ファイルがあり、それらの間に相互依存関係がある場合、コンパイラはリンク時に正しい順序でリンクする必要があります。リンクの順序が間違っていると、「未定義の参照」エラーが発生します。

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.cppMyClass という名前のクラスを定義しました。 # という名前の関数##foo() が呼び出され、foo() 関数の定義が File2.cpp に実装されます。 MyClass クラスは MyClass.h ヘッダー ファイルで宣言されていることに注意してください。 File1.cpp および File2.cpp をコンパイルするときに「'foo()' への未定義の参照」エラーが発生した場合は、foo() 関数を確認する必要があります。宣言と定義が一貫しているかどうかを確認し、MyClass.h ヘッダー ファイルが正しく参照されていることを確認してください。

2. リンク順序を確認する: コード内に複数のソース ファイルがあり、それらの間に相互依存関係がある場合、コンパイラはリンク時に正しい順序でリンクする必要があります。この問題は、ソース ファイルを正しい順序でコンパイラに渡すか、リンカが提供するコマンド ライン オプションを使用してリンク順序を指定することで解決できます。

サンプル コード 2:

// 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.cppFile2.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 サイトの他の関連記事を参照してください。

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