c++问题 求助大神!!!!!!
#include<iostream>usingnamespacestd;classpoint{public:intx,y;point(intxx,intyy):x(xx)...
#include<iostream>
using namespace std;
class point
{
public:
int x,y;
point(int xx,int yy):x(xx),y(yy)
{}
void show()
{
cout<<x<<" "<<y<<endl;
}
};
class my:public point
{
public:
my(int xx,int yy,int aa,int bb):x(xx),y(yy),a(aa),b(bb){}
void get()
{
cout<<a<<" "<<b<<endl;
}
private:
int a,b;
};
int main()
{
my m(1,2,3,4);
m.show();
m.get();
return 0;
}
--------------------Configuration: 10 - Win32 Debug--------------------
Compiling...
10.cpp
E:\C++6.0\Microsoft Visual Studio\MyProjects\10\10.cpp(19) : error C2512: 'point' : no appropriate default constructor available
E:\C++6.0\Microsoft Visual Studio\MyProjects\10\10.cpp(19) : error C2614: 'my' : illegal member initialization: 'y' is not a base or member
E:\C++6.0\Microsoft Visual Studio\MyProjects\10\10.cpp(19) : error C2614: 'my' : illegal member initialization: 'x' is not a base or member
执行 cl.exe 时出错.
10.obj - 1 error(s), 0 warning(s) 展开
using namespace std;
class point
{
public:
int x,y;
point(int xx,int yy):x(xx),y(yy)
{}
void show()
{
cout<<x<<" "<<y<<endl;
}
};
class my:public point
{
public:
my(int xx,int yy,int aa,int bb):x(xx),y(yy),a(aa),b(bb){}
void get()
{
cout<<a<<" "<<b<<endl;
}
private:
int a,b;
};
int main()
{
my m(1,2,3,4);
m.show();
m.get();
return 0;
}
--------------------Configuration: 10 - Win32 Debug--------------------
Compiling...
10.cpp
E:\C++6.0\Microsoft Visual Studio\MyProjects\10\10.cpp(19) : error C2512: 'point' : no appropriate default constructor available
E:\C++6.0\Microsoft Visual Studio\MyProjects\10\10.cpp(19) : error C2614: 'my' : illegal member initialization: 'y' is not a base or member
E:\C++6.0\Microsoft Visual Studio\MyProjects\10\10.cpp(19) : error C2614: 'my' : illegal member initialization: 'x' is not a base or member
执行 cl.exe 时出错.
10.obj - 1 error(s), 0 warning(s) 展开
4个回答
展开全部
point类里面只定义了有参数的构造函数,但没定义无参数的构造函数,因此构造子类对象的时候构造失败,只要在point类里面加:
point(){}
就行了
另外,定义成员变量最好这样定义
int x;
int y;
不要写成:
int x, y;
point(){}
就行了
另外,定义成员变量最好这样定义
int x;
int y;
不要写成:
int x, y;
追问
还是不行
追答
写成 my(int xx,int yy,int aa,int bb):point(xx,yy),a(aa),b(bb){} 确实是简单很多
你那样写为什么不行,因为要理解x(xx),y(yy),a(aa),b(bb)是什么意思,就是给变量初始化,注意不是赋值,还没调用基类和子类的构造函数,因此基类还是不存在的,因此基类的x,y是不存在的,因此找不到。但如果是先调用基类的构造函数,那么基类的x,y都存在,因此可以给他们初始化
我前面说的漏了,应该是这样,看注释
#include
using namespace std;
class point
{
public:
int x;
int y;
point(){} // 无参构造函数
point(int xx,int yy):x(xx),y(yy) {}
void show() { cout<<x<<" "<<y<<endl; }
};
class my:public point
{
public:
my(int xx,int yy,int aa,int bb):a(aa),b(bb) // 没有x,y,但调用了基类的无参构造函数
{
x = xx; // 在这里赋值
y = yy;
}
void get() { cout<<a<<" "<<b<<endl; }
private:
int a;
int b;
};
int main()
{
my m(1,2,3,4);
m.show();
m.get();
return 0;
}
展开全部
在子类中,给父类里的成员变量初始化要调用父类中的构造函数,把子类中的构造函数改成下面这样就行了:my(int xx, int yy, int aa, int bb) : point(xx, yy), a(aa), b(bb) {}
追问
这样可以了 但为什么不能像我这样做呢 谢谢啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
point(int xx,int yy):x(xx),y(yy)
point(int xx,int yy):x(xx),y(yy)
l两构造函数出错· ·
point(int xx,int yy):x(xx),y(yy)
l两构造函数出错· ·
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
嗯
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询