c++多个类定义在同一个cpp文件中调用报错

测试的正确格式代码:


#include <iostream>

using namespace std;
//定义一个圆类和点类,判断点与圆的内部还是外部等
//设计一个点类
class Point{//前置声明仍然报错,只有把这个类放Circle类的前面了
public:
    void setPoint(int _x,int _y){
        x = _x;
        y = _y;
    }
    int getX(){
        return x;
    }
    int getY(){
        return y;
    }
private:
    int x;
    int y;
};

//设计一个圆类
class Circle{
public:void setCircle(int _r,int _x0,int _y0){
            r = _r;
            x0 = _x0;
            y0 = _y0;
       }
       int judgePoint(Point &p1){
            int tem = (p1.getX()-x0)*(p1.getX()-x0)+(p1.getY()-y0)*(p1.getY()-y0)-r*r;
            if(tem > 0){
                return 1;
            }
            else if(tem == 0){
                return 0;
            }
            else{
                return -1;
            }
       }
private:
    int r;
    int x0;
    int y0;

};

int main()
{
    Circle c1;
    Point p;
    c1.setCircle(2,3,3);
    p.setPoint(6,6);
    if(c1.judgePoint(p)==0){
        cout <<"点在园上"<<endl;
    }
    else if(c1.judgePoint(p)==-1){
        cout <<"点在园内"<<endl;
    }
    else{
        cout <<"点在圆外"<<endl;
    }

    return 0;
}

相同代码不同顺序报错(Point类定义在Circle类的后面)

#include <iostream>

using namespace std;
//定义一个圆类和点类,判断点与圆的内部还是外部等

class Point;//类的前置声明,因为Circle类用到了Point类,所以要么把Point类放Circle类前面定义,要么就声明一下

//设计一个圆类
class Circle{
public:void setCircle(int _r,int _x0,int _y0){
            r = _r;
            x0 = _x0;
            y0 = _y0;
       }
       int judgePoint(Point &p1){
            int tem = (p1.getX()-x0)*(p1.getX()-x0)+(p1.getY()-y0)*(p1.getY()-y0)-r*r;
            if(tem > 0){
                return 1;
            }
            else if(tem == 0){
                return 0;
            }
            else{
                return -1;
            }
       }
private:
    int r;
    int x0;
    int y0;

};

//设计一个点类
class Point{//前置声明仍然报错,只有把这个类放Circle类的前面了
public:
    void setPoint(int _x,int _y){
        x = _x;
        y = _y;
    }
    int getX(){
        return x;
    }
    int getY(){
        return y;
    }
private:
    int x;
    int y;
};


int main()
{
    Circle c1;
    Point p;
    c1.setCircle(2,3,3);
    p.setPoint(6,6);
    if(c1.judgePoint(p)==0){
        cout <<"点在园上"<<endl;
    }
    else if(c1.judgePoint(p)==-1){
        cout <<"点在园内"<<endl;
    }
    else{
        cout <<"点在圆外"<<endl;
    }

    return 0;
}

问题:为何不能像Java那样,同一个文件内定义多个类,可以不分先后顺序直接调用?是编译器该优化还是专门这么设计的?还是什么?(当然,这只是一个小demo,在正式的企业开发中是不会这么定义,而是声明和实现分开,最后统一include一下再调用)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yhblog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值