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++了 with g++ count_comparison.cpp,这意味着quicksort没有提供的实现。

长话短说,尝试调用g++ -g -o a.out quicksort.cpp count_compaison.cpp并查看是否一切正常。

现在说来话长。在 c++ 中,.cpp文件可以单独编译,因此任何特定文件中的更新都不会导致从头开始构建整个项目。在文件中编写实现是一种常用的方法,但在链接之前应该单独编译.cpp每个文件。使用 IDE 时,通常项目配置文件会告诉 IDE 把事情搞清楚。但是,如果您通过命令行工具执行此操作,则应编译每个工具并链接它们。一种方便的方法,虽然不是很优雅,但在调用其他实用程序之前调用并让它决定输入文件是用于编译还是链接。.cpp.cppg++

一般来说,在处理较大的项目时,您应该尝试g++ -c a.o a.cppthen finallyld *.o获取可执行文件。

于 2013-02-17T05:39:23.263 回答