通过引用将整数向量传递给函数

时间:2013-02-17 05:33:10

标签: c++ stdvector

我正在读取一个整数文件到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 ++编译count_comparison.cpp时(安装在windows中的cygwin上),我收到以下错误:

/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

我知道哪里出错了?

1 个答案:

答案 0 :(得分: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来获取可执行文件。