对‘A:A()’的调用没有匹配的函数解决方案
对‘A::A()’的调用没有匹配的函数
[wln@localhost c++]$ g++ -o e1001 e1001.cpp
e1001.cpp: In constructor ‘B::B()’:
e1001.cpp:15: 错误:对‘A::A()’的调用没有匹配的函数
e1001.cpp:8: 附注:备选为: A::A(int)
e1001.cpp:5: 附注: A::A(const A&)
请教下,为什么会报错?怎么修改才是正确的?
------解决思路----------------------
派生类(B)的构造函数要调用基类(A)的构造函数,但是没有提供任何参数,所以需要调用一个没有参数的A类构造函数,也就是编译器说的A::A(),但是这个构造函数没有定义。
------解决思路----------------------
几个解决办法:
1. 自己写一个A::A()。可以把x初始化为一个缺省值比如0,当然从语法上来说什么也不做也可以。
2. 给B的构造函数加一个参数,用这个参数来调用A类的有参数的构造函数A::A(int)
------解决思路----------------------
基类没有相应的构造函数
------解决思路----------------------
你定义了一个带参的构造函数了,编译器就不再帮你生成默认的构造函数,要自己写一个
#include <iostream>
using namespace std;
class A
{
int x;
public:
A(int a):x(a){cout<<"cONSTRUCTINT A\n";}
};
class B:public A
{
public:
B(){cout<<"constructing B\n";}
};
int main()
{
B b;
}
[wln@localhost c++]$ g++ -o e1001 e1001.cpp
e1001.cpp: In constructor ‘B::B()’:
e1001.cpp:15: 错误:对‘A::A()’的调用没有匹配的函数
e1001.cpp:8: 附注:备选为: A::A(int)
e1001.cpp:5: 附注: A::A(const A&)
请教下,为什么会报错?怎么修改才是正确的?
------解决思路----------------------
派生类(B)的构造函数要调用基类(A)的构造函数,但是没有提供任何参数,所以需要调用一个没有参数的A类构造函数,也就是编译器说的A::A(),但是这个构造函数没有定义。
------解决思路----------------------
几个解决办法:
1. 自己写一个A::A()。可以把x初始化为一个缺省值比如0,当然从语法上来说什么也不做也可以。
2. 给B的构造函数加一个参数,用这个参数来调用A类的有参数的构造函数A::A(int)
------解决思路----------------------
基类没有相应的构造函数
------解决思路----------------------
你定义了一个带参的构造函数了,编译器就不再帮你生成默认的构造函数,要自己写一个