我是CPP的新手,正在练习继承。我认为我的语法有问题,但我无法说出原因,这是我的代码的一部分:
#include<iostream>
using namespace std;
class Clown{
public:
string name ;
void dance();
Clown(string s) {name = s;}
};
class CircusClown: public Clown{
public:
string name;
void dance();
CircusClown(string s){name = s;}
};
我认为我的继承班出了点问题。
我正在使用Mac,因此显示有问题,但这是错误:
Clowns.cpp: In constructor â:
Clowns.cpp:18: error: no matching function for call to â
Clowns.cpp:8: note: candidates are: Clown::Clown(std::string)
Clowns.cpp:4: note: Clown::Clown(const Clown&)
当构造派生类时,还必须调用基类的构造函数。而且,由于您的基类(Clown
)没有提供默认的构造函数,因此编译器不知道Clown
应使用哪个构造函数。
在这种情况下,您需要Clown
显式调用的构造函数。还要避免using namespace std;
并考虑std::string
按const
引用传递对象,而不是按值传递:
class CircusClown : public Clown {
public:
std::string name;
CircusClown(const std::string& s) : Clown(s), name(s) { }
};
有关更多信息,请参见调用超类构造函数的规则是什么?。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句