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

Passing a vector of integers to a function by reference

本文关键字:函数 向量 整数 引用      更新时间:2023-10-16

我正在将一个整数文件读入std::向量。这部分代码运行良好。我已经通过打印出矢量来检查了这一点。

现在,我想通过引用将这个向量传递到一个函数中。我想通过引用传递它,以便允许函数修改向量的内容。以下是我的代码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

你知道我哪里会出错吗?

我猜您仅用g++ count_comparison.cpp调用了g++,这意味着没有提供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,以获得可执行文件。