注册 登录
编程论坛 C++教室

不同文件如何编译连接

charderkk 发布于 2011-01-26 16:51, 806 次点击
编了个求中位数的程序 median.cpp
#include<vector>
#include<algorithm>
#include<stdexcept>
#include"median.h"
using namespace std;
typedef vector<double>::size_type vec_sz;
double median(vector<double> vec){
    vec_sz size=vec.size(),mid=size/2;
    if(size==0)
        throw domain_error("vector is empty");
    sort(vec.begin(),vec.end());
    return size%2==0?(vec[mid]+vec[mid-1])/2:vec[mid];
}
又写了头文件 median.h
#ifndef GUARD_median_h
#define GUARD_median_h

#include<vector>
double median(std::vector<double>);

#endif
但在一个程序test.cpp
#include<iostream>
 #include<string>
 #include<vector>
 #include"median.h"
 using namespace std;
 typedef vector<double>::size_type vec_sz;

 int main(){
 vector<double> homework;
 double x;
 while(cin>>x)
    homework.push_back(x);
 
 cout<<median(homework)<<endl;
 return 0;
 }

中调用时,在cmd中编译时出现以下提示
E:\cpp>g++ -o test test.cpp
C:\Users\charderkk\AppData\Local\Temp/ccsPWT7J.o:test.cpp:(.text+0x222): undefined
 reference to `median(std::vector<double, std::allocator<double> >)'
collect2: ld returned 1 exit status

请问是什么原因,还有就是在通常的文件编译连接有什么要注意的地方

[ 本帖最后由 charderkk 于 2011-1-26 18:09 编辑 ]
3 回复
#2
rjsp2011-01-27 09:39
compile一个个cpp文件
将它们link起来
#3
zhoufeng19882011-01-27 10:52
Windows下:g++ median.cpp test.cpp -o test.exe
或者写一个MakeFile。
或者是
    g++ -c median.cpp -o median.obj
    g++ -c test.cpp -o test.obj
    g++ median.obj test.obj -o test.exe
#4
charderkk2011-01-27 12:37
回复 3楼 zhoufeng1988
非常感谢
1