我正在读取一个整数文件到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
我知道哪里出错了?
答案 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
来获取可执行文件。