2 rainyclown Rainyclown 于 2017.08.29 16:37 提问

关于c++的对象成员问题

/*定义两个类
坐标类:Coordinate
数据成员:横纵坐标m_iX,m_iY
成员函数:构造,析构,数据封装

线段类:Line
数据成员:点两个 m_coorA,m_coorB
成员函数:构造,析构,数据封装,信息打印*/
/*Coordinate.h文件*/

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();
};
/*Line.h文件*/
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();
};

#include
#include
#include "Coordinate.h"
#include "Line.h"
using namespace std;

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 x1,int y1)
{
m_coorA(x1,y1).setX(x1);
m_coorA(x1,y1).setY(y1);
}
void Line::setB(int x2,int y2)
{
m_coorB(x2,y2).setX(x2);
m_coorB(x2,y2).setY(y2);
}
void Line::printfInfo()
{
cout<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;
cout<<"("<<m_coorA.getX()<<","<<m_coorA.getY()<<")"<<endl;
}

int main()
{
Line *p=new Line(1,2,3,4);
p->printfInfo();
delete p;
p=NULL;
system("pause");
return 0;
}
图片说明
//IDE是vs2010,求大佬指点哪里错了,编译总是通不过

6个回答

struggle_saoyears
struggle_saoyears   2017.08.30 08:44
已采纳

你定义的时候不要加参数

Rainyclown
Rainyclown 回复奋斗吧骚年666: 定义对象不能加形参吗,为什么呢?
3 个月之前 回复
XUIcsdn
XUIcsdn   2017.08.30 07:49

private:
Coordinate m_coorA(int x,int y);
Coordinate m_coorB(int x,int y);这里是两个函数声明
Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2)
这里你当成了成员变量
而且也没有Coordinate m_coorA(int x,int y);
Coordinate m_coorB(int x,int y);的定义

XUIcsdn
XUIcsdn 回复XUIcsdn:类只是一个蓝图一样的东西 写成Coordinate m_coorA;就OK了
3 个月之前 回复
XUIcsdn
XUIcsdn 回复Rainyclown: 你是说初始化吧 Coordinate m_coorB(int x,int y);这个是两个函数声明
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 定义对象不能传形参吗?
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 请问定义对象不能传形参吗?
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 定义对象不能传形参吗?
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 定义对象不能传形参吗?
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 定义对象不能传形参吗?
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 定义对象不能传形参吗?
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 定义对象不能传形参吗?
3 个月之前 回复
Rainyclown
Rainyclown 回复XUIcsdn: 定义对象不能传形参吗?
3 个月之前 回复
xiafei87
xiafei87   2017.08.29 17:11

Line::Line(int x1,int y1,int x2,int y2):m_coorA(x1,y1),m_coorB(x2,y2) ? 语法错误,没看明白什么意思

m294955408
m294955408   2017.08.29 17:19

.cpp 里面没有实现私有方法 m_coorA m_coorB吧

struggle_saoyears
struggle_saoyears   2017.08.29 20:35

构造函数改成这样可以编译通过
Line::Line(int x1,int y1,int x2,int y2)
{
m_coorA(x1,y1);
m_coorB(x2,y2);
cout<<"Line()"<<endl;
}

qq_22203741
qq_22203741   2017.09.05 15:52

定义的时候不要加参数

Csdn user default icon
上传中...
上传图片
插入图片