入门级linux下C++的多文件编译

来源:互联网 发布:费马的房间 知乎 编辑:程序博客网 时间:2024/05/21 17:27

        以前都是在windows下学C++,最近转到Linux下学习。留一下自己在学习过程中解决困难的笔记。

        在Linux下,如果定义了多个头文件(.h),且里面的方法或函数都上在另外的文件(.cpp)中实现的。当你在另一个包含有主函数的文件(.cpp)中调用这些方法后,在编译的时候,不能像在windows下,只编译包含有主函数的文件(其实是windows中的IDE自己把其它文件也编译了),而是要编译每个.cpp文件。你可以分开编译每个.cpp文件,也可以整个一直编译。 

 如:

//x.h{     void P();}


//x.cpp#include"x.h"{     void P()      {          cout<<"C++"<<endl;      }}

//main.cpp#include"x.h"int main(){     P();     return 0;}


编译:

1.分开编译  g++ x.cpp

                      g++  -o main main.cpp

编译完成之后就会生成一个main的可执行文件

2.一起编译  g++ -o main x.cpp main.cpp

编译完成之后就会生成一个main的可执行文件



再举个例子:

        下面在cylindircal.h中定义了一个圆柱体积类,成员变量有半径和高;方法有设置半径和高,返回半径,高和体积。在cylindircal.cpp中分别实现了所有的方法,且在main.cpp对其进行了调用。

/*************************************************************************> File Name: cylindircal.h> Author: Tolic > Mail: mr_king1994@163.com> Created Time: Fri 08 May 2015 09:18:09 CST ************************************************************************///cylindircal.h#include<iostream>#ifndef _CYLINDIRCAL_H#define _CYLINDIRCAL_Hconst double PI=3.14;class cylindircal{    private:    double radius;    double height;    public:    cylindircal();    ~cylindircal();    void setRadius(double r);    void setHeight(double h);    double getRadius();    double getHeight();    double getVolume(); };#endif

/*************************************************************************> File Name: cylindircal.cpp> Author: Tolic > Mail: mr_king1994@163.com> Created Time: Fri 08 May 2015 09:29:16 CST ************************************************************************///cylindircal.cpp#include<iostream>#include"cylindircal.h"using namespace std;cylindircal::cylindircal(){    this->radius=0.0;    this->height=0.0;}cylindircal::~cylindircal(){}void cylindircal::setRadius(double r){    this->radius=r;}void cylindircal::setHeight(double h){    this->height=h;}double cylindircal::getRadius(){    return this->radius;}double cylindircal::getHeight(){    return this->height;}double cylindircal::getVolume(){    return this->radius*this->radius*PI*this->height;}


/*************************************************************************> File Name: main.cpp> Author: Tolic > Mail: mr_king1994@163.com> Created Time: Fri 08 May 2015 09:35:11 CST ************************************************************************/#include<iostream>#include"cylindircal.h"using namespace std;int main(){    double temp;    cin>>temp;    cylindircal cy;    cy.setRadius(temp);    cin>>temp;    cy.setHeight(temp);    cout<<"Radius="<<cy.getRadius()<<","<<"Height"<<cy.getHeight()<<endl;    cout<<"Volume="<<cy.getVolume();    return 0;}



0 0