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

C++ 通过引用将整数向量传递给函数,c++,stdvector,C++,Stdvector,我正在把一个整数文件读入一个std::vector。代码的这一部分工作正常。我已经通过打印出向量来检查这一点 现在,我想通过引用将这个向量传递到一个函数中。我希望通过引用传递它,以便允许函数修改向量的内容。以下是我的代码计数\u comparison.cpp: #include "count_comparison.h" #include "quicksort.h" int main() { ... long long int comp_num; comp_num = q

我正在把一个整数文件读入一个std::vector。代码的这一部分工作正常。我已经通过打印出向量来检查这一点

现在,我想通过引用将这个向量传递到一个函数中。我希望通过引用传递它,以便允许函数修改向量的内容。以下是我的代码计数\u 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);
...
#include <vector>
long long int quicksort(std::vector <int>& A, int n, int l, int r); 
#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;
  }
}
。。。
#包括
std::载体A(10000);
...
quicksort.h包含以下内容:

...
#include <vector>
std::vector <int> A(10000);
...
#include <vector>
long long int quicksort(std::vector <int>& A, int n, int l, int r); 
#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;
  }
}
#包括
long-long-int快速排序(std::vector&A、int-n、int-l、int-r);
quicksort.cpp包含以下内容:

...
#include <vector>
std::vector <int> A(10000);
...
#include <vector>
long long int quicksort(std::vector <int>& A, int n, int l, int r); 
#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;
  }
}
#包括“quicksort.h”
长整型快速排序(标准::向量&A、整型n、整型l、整型r){
长整型数;
如果(n==1){
返回0;
}否则{
//修改
//计算num并返回它
返回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
/tmp/ccNCnqwV.o:count\u comparison.cpp:(.text+0xc6):对“快速排序(std::vector&,int,int,int)”的未定义引用
collect2:ld返回了1个退出状态

你知道我哪里会出错吗?

我猜你只调用了
g++
g++count\u comparison.cpp,这意味着没有提供
快速排序的实现

长话短说,尝试调用
g++-g-oa.out quicksort.cpp count\u compaison.cpp
,看看是否一切正常

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


一般来说,在处理较大的项目时,您应该尝试
g++-c a.o a.cpp
,然后最后
ld*.o
以获得一个可执行文件。

我猜您使用
g++
计数\u比较调用了
g++
,这意味着没有提供
快速排序
的实现

长话短说,尝试调用
g++-g-oa.out quicksort.cpp count\u compaison.cpp
,看看是否一切正常

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


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

链接行是什么样子的?显示确切的编译器调用。我猜你是在期待C++是java,编译器是猜测什么是链接。你把它链接正确了吗?您是如何调用
g++
?您应该做一些类似于
g++-g-oa.out quicksort.cpp count\u comparison.cpp
的事情,谢谢您的快速回复。我在做:g++-o比较计数\ u比较.cpp。忘了将quicksort.cpp添加到命令中链接行是什么样子的?显示确切的编译器调用。我猜你是在期待C++是java,编译器是猜测什么是链接。你把它链接正确了吗?您是如何调用
g++
?您应该做一些类似于
g++-g-oa.out quicksort.cpp count\u comparison.cpp
的事情,谢谢您的快速回复。我在做:g++-o比较计数\ u比较.cpp。忘记将quicksort.cpp添加到命令