没有用于调用的匹配函数

no matching function for call to

本文关键字:函数 调用 用于      更新时间:2023-10-16

我是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) { }
};

有关详细信息,请参阅调用超类构造函数的规则是什么?。