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

在学习C++时,敲的一个书上的代码,但是结果有误,求大神指点

gsw123456 发布于 2015-05-17 21:16, 873 次点击
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:
    Point(int xx=0,int yy=0)
    {
        x=xx;
        y=yy;
    }
    Point(Point &p);//就是利用Point p来给其赋初值
    int getX() {return x;}
    int getY() {return y;}
private:
    int x,y;
};

Point::Point(Point &p)
{
    x=p.x;
    y=p.y;
    cout << "Calling the copy constructor of Point " << endl;
}

//类的组合
class Line
{
public:
    Line(Point xp1,Point xp2);
    Line(Line &1);
    double getLen() {return len;}
private:
    Point p1,p2;
    double len;
};

//组合类的构造函数
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2)
{
    cout << "Calling constructor of Line" << endl;
    double x=static_cast<double>(p1.getX()-p2.getX());
    double y=static_cast<double>(p1.getY()-p2.getY());
    len=sqrt(x*x+y*y);
}

//组合类的复制构造函数
Line::Line(Line &1):p1(1.p1),p2(1.p2)
{
    cout << "Calling the copy constructor of Line " << endl;
    len=1.len;
}

//主函数
int main()
{
    Point myp1(1,1),myp2(4,5);
    Line line(myp1,myp2);
    Line line2(line);
    cout << "The length of the line is: ";
    cout << line .getLen() << endl;
    cout << "The length of the line2 is:";
    cout << line2.getLen() << endl;
    return 0;
}
怎么有一个浮点后缀常熟的错误提醒???
求大神解释
9 回复
#2
诸葛欧阳2015-05-17 21:20
Line类里面对len成员变量并没有给出定义
#3
gsw1234562015-05-17 21:24
??有定义len啊。double len??
#4
诸葛欧阳2015-05-17 21:28
我说的是你没有给它赋予实际意义,你只是定义的这个变量,但没指明它表示什么
#5
诸葛欧阳2015-05-17 21:28
我猜你想用它表示程度,但你并没有赋予它边长值
#6
gsw1234562015-05-17 21:36
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:
    Point(int xx=0,int yy=0)
    {
        x=xx;
        y=yy;
    }
    Point(Point &p);//就是利用Point p来给其赋初值
    int getX() {return x;}
    int getY() {return y;}
private:
    int x,y;
};

Point::Point(Point &p)
{
    x=p.x;
    y=p.y;
    cout << "Calling the copy constructor of Point " << endl;
}

//类的组合
class Line
{
public:
    Line(Point xp1,Point xp2);
    Line(Line &l);
    double getLen() {return len;}
private:
    Point p1,p2;
    double len;
};

//组合类的构造函数
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2)
{
    cout << "Calling constructor of Line" << endl;
    double x=static_cast<double>(p1.getX()-p2.getX());
    double y=static_cast<double>(p1.getY()-p2.getY());
    len=sqrt(x*x+y*y);
}

//组合类的复制构造函数
Line::Line (Line &l): p1(l.p1), p2(l.p2)
{
    cout << "Calling the copy constructor of Line " << endl;
    len=l.len;
}

//主函数
int main()
{
    Point myp1(1,1),myp2(4,5);
    Line line(myp1,myp2);
    Line line2(line);
    cout << "The length of the line is: ";
    cout << line .getLen() << endl;
    cout << "The length of the line2 is:";
    cout << line2.getLen() << endl;
    return 0;
}
不过我的和这个书本提供代码,一样的,为啥他的就能够运行??
谢谢了,大神
#7
诸葛欧阳2015-05-17 21:52
这里面len有没有复制也没有默认的值应该输出乱码,你再好好看看是不是少了一个函数
#8
yangfrancis2015-05-18 13:42
//组合类的复制构造函数
Line::Line(Line &1):p1(1.p1),p2(1.p2)
{
    cout << "Calling the copy constructor of Line " << endl;
    len=1.len;
}
把它的后一条语句改成len=1.getlen();试试
#9
hzj1996032015-05-18 16:59
回复 楼主 gsw123456
程序代码:
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:
    Point(int xx=0,int yy=0)
    {
        x=xx;
        y=yy;
    }
    Point(Point &p);//就是利用Point p来给其赋初值
    int getX() {return x;}
    int getY() {return y;}
private:
    int x,y;
};

Point::Point(Point &p)
{
    x=p.x;
    y=p.y;
    cout << "Calling the copy constructor of Point " << endl;
}

//类的组合
class Line
{
public:
    Line(Point xp1,Point xp2);
    Line(Line &l);
    double getLen() {return len;}
private:
    Point p1,p2;
    double len;
};

//组合类的构造函数
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2)
{
    cout << "Calling constructor of Line" << endl;
    double x=static_cast<double>(p1.getX()-p2.getX());
    double y=static_cast<double>(p1.getY()-p2.getY());
    len=sqrt(x*x+y*y);
}

//组合类的复制构造函数
Line::Line(Line &l):p1(l.p1),p2(l.p2)//不是1,是小写L
{
    cout << "Calling the copy constructor of Line " << endl;
    len=l.len;
}

//主函数
int main()
{
    Point myp1(1,1),myp2(4,5);
    Line line(myp1,myp2);
    Line line2(line);
    cout << "The length of the line is: ";
    cout << line .getLen() << endl;
    cout << "The length of the line2 is:";
    cout << line2.getLen() << endl;
    return 0;
}
#10
文心边城2015-05-25 00:07
没发现你改了哪
1