0

整数のファイルを std::vector に読み込んでいます。コードのこの部分は正常に動作しています。ベクトルを印刷してこれを確認しました。

ここで、このベクトルを参照によって関数に渡したいと思います。関数がベクトルの内容を変更できるように、参照渡ししたいと思います。以下は私のコードcount_comparison.cppです:

#include "count_comparison.h"
#include "quicksort.h"

int main() {

  ...     
  long long int comp_num;
  comp_num = quicksort(A,10000,0,9999);

  ...
}

count_comparison.h の内容は次のとおりです。

...
#include <vector>
std::vector <int> A(10000);
...

quicksort.h の内容は次のとおりです。

#include <vector>
long long int quicksort(std::vector <int>& A, int n, int l, int r); 

quicksort.cpp の内容は次のとおりです。

#include "quicksort.h"
long long int quicksort(std::vector <int>& A, int n, int l, int r) {

  long long int num;

  if (n == 1) {
    return 0;
  } else {
    // modify A
    // calculate num and return it
    return num;
  }
}

g++ (Windows の cygwin にインストール) を使用して count_comparison.cpp をコンパイルすると、次のエラーが発生します。

/tmp/ccNCnqwV.o:count_comparison.cpp:(.text+0xc6): undefined reference to `quicksort(std::vector<int, std::allocator<int> >&, int, int, int)'
collect2: ld returned 1 exit status

私が間違っている可能性がある場所はありますか?

4

1 に答える 1

3

g++のみで呼び出したと思います。g++ count_comparison.cppつまり、の実装は提供されquicksortていません。

簡単に言えば、呼び出しg++ -g -o a.out quicksort.cpp count_compaison.cppて、すべてが正常に機能するかどうかを確認してください。

さて、長い話です。C++ では、.cppファイルを個別にコンパイルできるため、特定のファイルを更新しても、プロジェクト全体を最初からビルドする必要はありません。実装をファイルに記述する方法は一般的に採用されていますが、リンクする前に.cpp.cppファイルを個別にコンパイルする必要があります。IDE を使用する場合、通常、プロジェクト構成ファイルは、IDE に問題を解決するように指示します。ただし、コマンドライン ツールを使用してこれを行う場合は、それぞれをコンパイル.cppしてリンクする必要があります。あまり洗練されていませんが、便利な方法は、g++他のユーティリティを呼び出す前に、入力ファイルがコンパイル用かリンク用かを呼び出して判断させることです。

一般的に言えば、大規模なプロジェクトを扱う場合はg++ -c a.o a.cpp、最後ld *.oに実行可能ファイルを取得する必要があります。

于 2013-02-17T05:39:23.263 に答える