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

这个错误怎么改啊。。。??B类参数有问题

chengUFO 发布于 2009-11-10 22:27, 729 次点击
#include<iostream>
using namespace std;


class A{
int x;
public:
    A(int a):x(a)
    {cout<<"constructing A\n";
    }
};
class B:public A{
public:
    B(){
    cout<<"constructing B\n";
    }
};
int main()
{
    B b;
    return 0;
}
4 回复
#2
qlc002009-11-10 22:55
因为你在主函数中声明了B b,这个声明应该对应一个默认的构造函数,而B类是从A公有继承的,而A中没有默认的,所以会报错!
#include<iostream>
using namespace std;


class A{
int x;
public:
    A(){
    cout<<"constructing A\n";
    }
    A(int a):x(a)
    {cout<<"constructing A\n";
    }
};
class B:public A{
public:
    B(){
    cout<<"constructing B\n";
    }
};
int main()
{
    B b;
    return 0;
} 在A中添加一个默认的构造函数就行了!
#3
quietstar2009-11-10 23:16
这个不是B类参数的问题,而是B类的构造函数的问题。在构造一个子类的对象时,首先会调用基类的构造函数,对构造函数进行初始化。B b这个语句,构造B的一个对象,由于没有参数且继承自A,因此会调用A的没有参数的构造函数,但A类并没有不带参数的构造函数,因此编译器会提示没有合适的构造函数。修改如下,供参考:

#include<iostream>
using namespace std;

class A
{
private:
    int x;
public:
    A(int a):x(a)
    {        
        cout<<"constructing A\n";
    }
};

class B:public A
{
public:
    B(int a):A(a)
    {
        cout<<"constructing B\n";
    }
};

int main()
{
    B b(7);
    return 0;
}
#4
newCpp2009-11-11 21:07
和二楼说的一样O(∩_∩)O哈!!
真的是因为A基类里面没有默认的构造函数所致!
#5
chengUFO2009-11-11 22:32
非常感谢各位详细讲解。。。。
小弟明白了。。。。
1