我的代码是:
测试.cpp
#include<iostream>
#include<boost/bind.hpp>
#include "extern.h"
using namespace std;
using namespace boost;
int fun(int x,int y){return x+y;}
/*
*void add(int &m,int &n);
*/
int main(){
int m=1;int n=2;
cout << m << " "<< n << endl;
add(m,n);
cout << m << " "<< n << endl;
return 0;
}
外部.h:
#include<iostream>
#include<boost/bind.hpp>
using namespace std;
using namespace boost;
void add(int &n,int &m);
外部.cpp:
#include<iostream>
#include<boost/bind.hpp>
using namespace std;
using namespace boost;
extern int m;
extern int n;
void add(int &n,int &m) {
n = n+1;
m = m+1;
}
当我编译它时
g++ -Wall -o test test.cpp
结果是:
/tmp/ccMHVRNo.o: In function `main':
test.cpp:(.text+0x7b): undefined reference to `add(int&, int&)'
collect2: ld returned 1 exit status
但是当我编译它时:
g++ -Wall -o test test.cpp extern.cpp
它运作良好:
$ ./test
1 2
2 3
所以原因是test.cpp
找不到add()
函数的实现。
但是我已经补充extern.h
了test.cpp
,为什么它仍然说“未定义的引用add(int&, int&)
”?