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

程序编译错误 求指教

糊涂无罪 发布于 2012-05-28 17:53, 515 次点击
#include <iostream>
using namespace std;
class vehicle{
public:
    void run (){};
    void stop (){};
    vehicle(double ms,double w){
        maxspeed=ms;
        weight=w;
        cout<<"constring vehicle in called"<<endl;}
private:
    double maxspeed;
    double weight;
};
class bicycle:public vehicle{
public:
    bicycle(double h,double ms,double w):vehicle(ms,w){
        hight=h;
        cout<<"constring bicycle is called"<<endl;}
private:
    double hight;
};
class motorcar:public vehicle{
public:
    motorcar(double n,double ms, double w):vehicle(ms,w){
        seatnum=n;
        cout<<"constring motorcar is called"<<endl;}
private:
    double seatnum;
};
class motorcycle:public bicycle,public motorcar{
public:
    motorbicycle(double n,double h,double ms,double w):bicycle(double h,double ms,double w),
        motorcar(double n,double ms,double w)
    {cout<<"constring of motorbicycle is called"<<endl;}
};
int main(){
    motorbicycle m1(1.0,2.0,3.0,4.0);
    return 0;
}
8 回复
#2
lknight2012-05-28 21:17
#include <iostream>
using namespace std;
class vehicle{
public:
    void run (){};
    void stop (){};
    vehicle(double ms,double w){
        maxspeed=ms;
        weight=w;
        cout<<"constring vehicle in called"<<endl;}
private:
    double maxspeed;
    double weight;
};
class bicycle:public vehicle{
public:
    bicycle(double h,double ms,double w):vehicle(ms,w){
        hight=h;
        cout<<"constring bicycle is called"<<endl;}
private:
    double hight;
};
class motorcar:public vehicle{
public:
    motorcar(double n,double ms, double w):vehicle(ms,w){
        seatnum=n;
        cout<<"constring motorcar is called"<<endl;}
private:
    double seatnum;
};
class motorcycle:public bicycle,public motorcar{
public:
    motorbicycle(double n,double h,double ms,double w):bicycle(double h,double ms,double w),
        motorcar(double n,double ms,double w)//这句首先这个构造函数名字和类名字不一样,再者父类初始化列表按你的做法应该这写:bicycle(h,ms,w),motorcar(n,ms,w)
    {cout<<"constring of motorbicycle is called"<<endl;}
};
int main(){
    motorbicycle m1(1.0,2.0,3.0,4.0);//类的名字打错了
    return 0;
}
#3
sunny孙2012-05-28 21:50
注意虚基类的应用···
#4
丨丨丨2012-05-29 13:04
二楼正确,这种错误可不能常犯哦
#5
nongzhaobo2012-05-29 16:54
看不懂了....
#6
糊涂无罪2012-05-30 09:57
受教了,谢谢各位!问题解决了,二楼辛苦了。有劳各位了,以后多指教。
#7
糊涂无罪2012-05-30 09:59
麻烦再问一下,使用虚基类有什么好处呢?求指教。谢谢!
#8
lknight2012-05-30 20:42
使用虚基类在实例化的时候可以避免歧义,比如说有基类A,另有类B和C都继承了A,然后再有类D继承了B和C,这时候如果没有使用虚基类,D在访问从A类继承的方法和属性的时候就有可能出现歧义,因为B和C在实例化的时候内存中都有一份A的实例,编译器不知道是访问的方式,因为D->B->A和D->C->A都可以;如果使用虚基类B和C中存在的就不是A的实例了,而是存在一个指向A实例的指针,D访问从A类继承的方法和属性时就没有歧义,但是这也并不能完全消除歧义,需要设计类时合理安排。
#9
糊涂无罪2012-05-31 18:48
回复 8楼 lknight
问题解决,谢谢解惑!
1