C++中cpp和.h分开写的问题,qwq,栓q码友们

代码和在一起的时候本身是没有错的,但是分开成这3个文件就有错了,可以看看头文件哪里有问题吗?,qwq,谢谢帮忙
libai.cpp

img


main.cpp

img


libai.h

img

img

在 libai.h 里面加上
#program once
避免多次包含,重复定义。
也可以用
#ifndef __libai_h__
#def __libai_h__
你原来的类定义
#endif
...


贴代码,可以帮你调试看看



```c++

//2.h
#ifndef _2_h_
#define _2_h_
class Point2D{
    float x, y;
  public:
   
     friend class Circle;
      friend float Distance(Point2D a,Point2D b);
     Point2D(float x=0, float y=0)
  {
    this->x = x;
    this->y = y;
  }
};
class Circle{
    Point2D center;
    float radius;
    static int Num;
  public:
    const float PI;
    Circle(float,float,float);
    void Setcenter(float,float);
    static int getNum()
    {
        return Num;
    }
    void get();
//补全构造函数
//添加修改center坐标的函数
//添加返回Num值的函数
};

int Circle::Num = 3;
#endif



//test.cpp
#include "2.h"
#include <iostream>
#include <cmath>
void Circle::get() 
{
    std::cout<<center.x<<" "<<center.y<<" "<<radius<<std::endl;
}


Circle::Circle(float x,float y,float r) : center(x,y),PI(3.1415926)
{
    radius = r;
//    std::cout<<"构造"<<std::endl;
}

void Circle::Setcenter(float x,float y)
{
    this->center.x = x;
    this->center.y = y;
}
//使以下函数可以运行
float Distance(Point2D a,Point2D b)
 {
    float d = sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    return d;
}


//main.cpp

#include <iostream>
#include <cmath>
#include "2.h"

using namespace std;

int main()
{
/*补全初始化,要求三个
圆分别以原点,(5,3)
和(4,5)为圆心,以3为
半径。然后修改第二个圆
的圆心为(1,1)*/
   Circle cir[3] = {Circle(0,0,3),Circle(5,3,3),Circle(4,5,3)};
   cir[1].get() ;
   cir[1].Setcenter(1,1);
   cir[1].get() ;
   cout<<cir[1].getNum() <<" "<<cir[2].getNum() <<endl;
   Point2D a(0,3);
   Point2D b(4,0);
   cout << Distance(a,b) << endl;
    return 0;
}

```