为了账号安全,请及时绑定邮箱和手机立即绑定

和视频内容一样 但一直过不了编译,求大神指点1

#include <iostream>

#include <stdlib.h>

using namespace std;

class Coordinate

{

private:

int m_iX;

int m_iY;

public:

Coordinate(int x,int y);

~Coordinate();

void setX(int x);

void setY(int y);

int getX();

int getY();


};

class Line

{

private:

Coordinate m_coorA(int x,int y);

Coordinate m_coorB(int x,int y);

public:

Line(int x1,int y1,int x2,int y2);

~Line();

void setA(int x,int y);

void setB(int x,int y);

void printfInfo();

};

Coordinate::Coordinate(int x,int y)

{

m_iX=x;

m_iY=y;

cout<<"Coordinate "<<m_iX<<" "<<m_iY<<endl;

}

Coordinate::~Coordinate()

{

cout<<"~Coordinate "<<m_iX<<" "<<m_iY<<endl;

}

void Coordinate::setX(int x)

{

m_iX=x;

}

int Coordinate::getX()

{

return m_iX;

}

void Coordinate::setY(int y)

{

m_iY=y;

}

int Coordinate::getY()

{

return m_iY;

}

Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2)

{

cout<<"Line()"<<endl;

}

Line::~Line()

{

cout<<"~Line"<<endl;

}

void Line::setA(int x,int y)

{

m_coorA.setX(x);

m_coorA.setY(y);

}

void Line::setB(int x,int y)

{

m_coorB.setX(x);

m_coorB.setY(y);

}

void Line::printfInfo()

{

cout<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;

cout<<"("<<m_coorB.getX()<<","<<m_coorB.getY()<<")"<<endl;

}


int main()

{

Line *p=new Line(1,2,3,4);

p->printfInfo();

delete p;

p=NULL;

system("pause");

return 0;

}

http://img1.sycdn.imooc.com//59a447b4000163c411200454.jpg

正在回答

3 回答

你是写在同一个文件中,建议最好是把构造函数写在类内,再来看变量的错误

1 回复 有任何疑惑可以回复我~

一样个屁,抄都抄错害我以为你的真的一样,出了一大堆错。

知道为什么Line的private下面数据为什么是Coordinate定义吗?就是在那里实例化对象A点和B点,Line.cpp的构造函数列表实际就是给对象A,B赋值,后面才能调用对象A,B.你直接

private:

Coordinate m_coorA(int x,int y);

Coordinate m_coorB(int x,int y);

就是把(x,y)传入对象A,B,但是private里面的数据是外部不能调用的,导致m_coorA(int x,int y);不能调用出来,

private:

Coordinate m_coorA;

Coordinate m_coorB;

这样才能通过修改m_coorA(int x,int y);在Line.cpp中对对象A,B进行操作

0 回复 有任何疑惑可以回复我~

你把Line定义里面的

private:

Coordinate m_coorA(int x,int y);

Coordinate m_coorB(int x,int y);

改成:

private:

Coordinate m_coorA;

Coordinate m_coorB;

就可以了。

原因的话我刚学也不懂说的对不对,我感觉里定义的是一个数据成员,你却把它写成了函数形式,编译器没有找到这个“函数”的定义所以就报错了吧。。。

这个你多看看编译器报错的提示应该可以找出来。。。

0 回复 有任何疑惑可以回复我~
#1

慕圣2268672

不会对的吧!看代码好像是没什么问题。看编译器提示的错误应该是coordinate.h,coordinate。cpp,Line.h和Line.cpp之间缺了一个#include “头文件名”。
2017-08-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

和视频内容一样 但一直过不了编译,求大神指点1

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信