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

PHPz
リリース: 2023-08-26 23:01:52
オリジナル
1388 人が閲覧しました

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

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

C でプログラムを作成する場合、コンパイル エラーが発生することがよくあります。一般的なエラーの 1 つは、「'namespace::function' への未定義の参照」です。これは、リンク段階で関数の定義が見つからないことを意味します。このエラーは通常、他のソース ファイルまたはライブラリで定義された関数を呼び出すときに発生します。この記事では、このエラーに焦点を当て、考えられる解決策をいくつか紹介します。

このエラーの解決を始める前に、簡単なコード例を見てみましょう:

// file1.cpp

#include <iostream>

void foo();

int main() {
  foo();
  return 0;
}
ログイン後にコピー
// file2.cpp

#include <iostream>

void foo() {
  std::cout << "Hello, world!" << std::endl;
}
ログイン後にコピー

上の例では、関数 foo() を定義しています。これは main() 関数で呼び出されます。これら 2 つのコード ファイルをそれぞれ file1.cpp および file2.cpp として保存できます。

これら 2 つのファイルをコンパイルしてリンクしようとすると、次のエラーが発生する可能性があります:

undefined reference to `foo()'
ログイン後にコピー

それでは、このエラーを解決するにはどうすればよいでしょうか。考えられる解決策は次のとおりです。

  1. すべてのソース ファイルをコンパイルしてリンクします。
    これは最も単純な解決策です。2 つのソース ファイルを一緒にコンパイルしてリンクするだけです。 GNU コンパイラを例にとると、コマンド

    g++ file1.cpp file2.cpp -o program
    ログイン後にコピー

    を使用して 2 つのファイルを一緒にコンパイルし、./program を使用して生成された実行可能ファイルを実行できます。

  2. 関数の宣言の使用:
    foo() 関数の宣言を file1.cpp の先頭に置く場合 ファイル、これによりコンパイル エラーが解決されます。 file1.cpp を次のように変更します。

    // file1.cpp
    
    #include <iostream>
    
    void foo(); // 在这里添加函数声明
    
    int main() {
      foo();
      return 0;
    }
    ログイン後にコピー

    次に、2 つのファイルをコンパイルしてリンクすると、プログラムが正常に実行されます。

  3. ヘッダー ファイルの使用:
    foo() 関数の宣言を別のヘッダー ファイルに配置し、その後 file1 に配置できます。 cppfile2.cpp には、それぞれこのヘッダー ファイルが含まれています。コードを次のように変更します。

    // file1.cpp
    
    #include <iostream>
    #include "functions.h" // 包含头文件
    
    int main() {
      foo();
      return 0;
    }
    ログイン後にコピー
    // file2.cpp
    
    #include <iostream>
    #include "functions.h" // 包含头文件
    
    void foo() {
      std::cout << "Hello, world!" << std::endl;
    }
    ログイン後にコピー

    functions.hヘッダー ファイルの内容は次のとおりです。

    // functions.h
    
    void foo(); // 函数声明
    ログイン後にコピー

    次に、2 つのファイルをコンパイルしてリンクし、プログラムは正常に実行できます。

    上記の 3 つの方法により、「'namespace::function' への未定義の参照」コンパイル エラーを正常に解決できます。もちろん、実際のプログラミングでは他のより複雑な状況に遭遇する可能性がありますが、問題を解決するための考え方は似ています。つまり、関数の定義と宣言が呼び出される必要がある場所に確実に表示されるようにすることです。

    要約:
    C プログラミングで「'namespace::function' への未定義の参照」というエラーが発生した場合は、まずこのエラーがリンク段階で発生し、関数が実行できないことを示すことを明確にする必要があります。定義。このエラーは、関数宣言やヘッダー ファイルなどを使用して、すべてのソース ファイルをコンパイルしてリンクすることで解決できます。エラーのトラブルシューティングを行う場合は、関数の定義と宣言が呼び出される場所に表示されていることを確認してください。

    以上がC++ コンパイル エラー:「'namespace::function' への未定義の参照」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!