【问题标题】:No matching function for call to 'class'调用“类”没有匹配的函数
【发布时间】:2017-10-27 13:25:26
【问题描述】:

我正在努力学习和理解多重继承。

我有一个“squat”类,它是“abandoned”类的孩子

为什么我收到错误消息 no matching function for call to Abandoned::Abandoned()

squatter.cpp|9|error: no matching function for call to 'Abandoned::Abandoned()'|

我在这个网站上看过很多与这个主题相关的类似帖子。他们说我必须用正确的参数声明一个 Abandoned 对象,但我没有尝试使用 Abandoned 中的任何函数,我现在只想将它链接起来。

我认为这与我的构造函数有关,但我无法弄清楚问题所在。

对不起,代码的大墙,但我想不出更好的方法

这是我的深蹲 .cpp/h

#ifndef SQUAT_H
#define SQUAT_H
#include<abandoned.h>
#include<building.h>

class Squat:public Buildings, public Abandoned
{
private:
    bool isempty;

public:

    Squat(bool);
    virtual void display();
    virtual void isoccupied(bool);


};



#endif // SQUAT_H

和.cpp

#include<iostream>
#include<squat.h>
#include<building.h>
#include<apartment.h>
#include<abandoned.h>


Squat::Squat(bool isitempty):isempty(isitempty){}

void Squat::isoccupied(bool isitempty)
{
    if(isitempty=1)
    {
        isempty=1;
        cout<<"The abandoned building is empty"<<endl;
    }
    else cout<<"The abandoned building is full of dirty squatters"<<endl;
}

我的理解是当我说的时候;

class Squat:public Buildings, public Abandoned

这将类“链接”在一起

下面是我废弃的.cpp/h

#ifndef ABANDONED_H
#include<vector>
#include<building.h>
#define ABANDONED_H


class Abandoned:public Buildings
{

private:
    int length;
    std::vector<int> status;
    int sum;

public:

    Abandoned(int m_size, int asum);
    Abandoned(bool);
    virtual void getstatus(int);
    virtual void display();
    virtual void demolish(int);
    virtual void rebuild(int);
    //virtual void demolish(int);



};






#endif // ABANDONED_H

还有我的 .cpp

#include<iostream>
#include<string>
#include<vector>
#include<apartment.h>
#include<building.h>
#include<abandoned.h>
#include<algorithm>
#include<numeric>
using namespace std;

Abandoned::Abandoned(int m_size, int asum): length(m_size), status(m_size, 0), sum(asum)
{}


void Abandoned::getstatus(int m_size)
{
   status.push_back(length);

};

void Abandoned::display()
{
    Buildings::display();
    cout << " length of status is: "<<status.size()<<endl;
}

void Abandoned::demolish(int asum)
{
    if(asum<3)
    {
        cout<<"The building is below the safety standards and should be demolished"<<endl;
    }else{
        cout<<"The building meets the safety standards and can be rebuilt"<<endl;}

}

void Abandoned::rebuild(int asum)
{
    if(asum>3)
    {
        cout<<"The building is above the safety standards and should be rebuilt"<<endl;
    }else{
        cout<<"The building should be demolished"<<endl;}

}

【问题讨论】:

  • 我很确定大部分代码与手头的问题无关。您能否将其简化为 MVCE? TIA。
  • 除了@Borgleader 所说的之外,编译器显示的确切错误消息会很有用。

标签: c++ class multiple-inheritance


【解决方案1】:

Abandoned 类没有无参数构造函数。这意味着派生类的任何构造函数都必须从Abandoned 中选择要调用的构造函数:

Squat::Squat(bool isitempty): Abandoned(...), isempty(isitempty){}

【讨论】:

  • 啊,我明白了,所以我需要把 Abandoned(int m_size, int asum) 放在那里?我可以通过放弃一个无参数的构造函数来解决这个问题吗?感谢您的帮助
  • @TonyHibbert 是的,您需要提供大小和总和或使用 bvool 构造函数(您忘记包含),是的,添加 no-arg 也将修复编译错误。
  • 谢谢,所以我提出了您的建议,现在构造函数读取 'Squat::Squat(bool isitempty):Abandoned(int m_size, int asum), isempty(isitempty){}' 我是在 int 之前得到一个错误,预期的主要表达式,这对我来说是基本错误,但我无法发现它。无 arg 构造函数是否看起来像 Abandoned() {}感谢您的帮助
  • @TonyHibbert Squat::Squat(bool isitempty, int size, int sum):Abandoned(size, sum), isempty(isitempty){}
  • 谢谢棘轮!我不得不将我的 squat.h 文件中的构造函数更改为 Squat(bool, int, int) 但这似乎有效..除了现在我收到错误“未定义对 'vtable for squat' 的引用”
猜你喜欢
  • 2017-05-08
  • 2015-09-21
  • 2016-01-31
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多