c++
a.h
//a.h
void fun1(); 头文件中只放声明
b.cpp
//放a.h中fun1的定义
#include<iostream>
void fun1(){
cout<<“hello world!"<<endl;
}
c.cpp
//main函数
#include"a.h"//预处理指令把a.h里的代码插入
int main{
fun1();
}
compile 会把b.cpp和c.cpp变成.obj/.o,link过程会找到fun1的定义
! 如果在a.h中写 int a-建立存储空间 ,b.cpp中写int a=3会出错,int a为定义,那么重复定义,在a.h中声明a用extern int a-不建立存储空间
一般的类可以声明与定义分开
a.h //声明类
class complexa
{
private:
double real;
double imag;
public:
complexa(double r,double i);
double abscomplexa();
};
b.cpp //类的实现 需加入#include"a.h" 否则编译时不知道complexa是什么
#include<math.h>
#include"a.h"
complexa::complexa(double r,double i){
real=r;
imag=i;
}
double complexa::abscomplexa(){
double t;
t=real*real+imag*imag;
return sqrt(t);
}
main.cpp
#include"a.h"
#include<iostream>
using namespace std;
int main(){
complexa A(1.1,2.2);
cout<<A.abscomplexa()<<endl;
return 0;
}
模板类会出错
原来这个跟模板的编译模型有关
1.包含编译模型:编译器必须看到用到的所有模板的定义。就是把模板类的声明和定义放在一起,如头文件中。
2.分离编译模型:是指模板类声明在头文件中,而成员函数和静态数据成员放在.c/.cpp中,这时需要用C++关键字export指明
在.h中加入
#ifndef S-------xxx_H_H
#define S--------xxx_H_H
#endif
防止类的重复定义