【问题标题】:Error Implementing Derived Class Constructor: "No Instance of Overloaded Function Matches the Specified Type实现派生类构造函数时出错:“没有重载函数的实例与指定类型匹配
【发布时间】:2016-01-25 22:16:58
【问题描述】:

以下源码旨在创建一个抽象基类(SubsystemClass)和一个派生的最终类(DisplaySubsystemClass)。派生类的构造函数的实现因错误“没有重载函数“DisplaySubsystemClass::DisplaySubsystemClass”的实例与指定类型匹配”而失败。我很困惑。

子系统类.hpp

#ifndef SUBSYSTEMCLASS_HPP
#define SUBSYSTEMCLASS_HPP

#include <memory>
#include "DriverClass.hpp"

class SubsystemClass 
{
protected:
    std::shared_ptr<DriverClass> _driver;
public:
    virtual ~SubsystemClass();
    enum DriverCatalog;
};

#endif

DisplaySubsystemClass.hpp

#ifndef DISPLAYSUBSYSTEMCLASS_HPP
#define DISPLAYSUBSYSTEMCLASS_HPP

#include <memory>
#include "../SubsystemClass.hpp"
#include "DisplayDriverClass.hpp"

class DisplaySubsystemClass final : public SubsystemClass
{
private:
    std::shared_ptr<DisplayDriverClass> _driver;
public:
    DisplaySubsystemClass(DisplaySubsystemClass::DriverCatalog driverCatalogItem);
    ~DisplaySubsystemClass();
    enum DriverCatalog {
        DISPLAY_DRIVER_CONSOLE,
        DISPLAY_DRIVER_CURSES,
        DISPLAY_DRIVER_SFML,
        DISPLAY_DRIVER_OPENGL
    };
};

#endif

DisplaySubsystemClass.cpp

#include <memory>

#include "DisplaySubsystemClass.hpp"
#include "SFMLDisplayDriverClass.hpp"
DisplaySubsystemClass::DisplaySubsystemClass(DisplaySubsystemClass::DriverCatalog driverCatalogItem)
{
}

DisplaySubsystemClass::~DisplaySubsystemClass()
{
}

【问题讨论】:

  • 你需要告诉它调用哪个父构造函数 - stackoverflow.com/questions/120876/…
  • 编译器消息对这个问题非常没有帮助
  • 我不明白自己要覆盖基类构造函数,因为它没有;除了可能生成的默认值之外。我错了吗?

标签: c++ inheritance constructor


【解决方案1】:

枚举应该在构造函数中用作参数类型之前声明。

【讨论】:

  • @DanielLee 问题是错误信息非常混乱。
  • 也许吧。但我不确定如此依赖质量错误输出是一件好事。我把这段代码转了几个小时,但没有注意到最基本的错误之一;在定义变量之前使用它。也就是说,我发现 Visual Studio 在这方面一点帮助都没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 2021-05-24
  • 2014-09-09
  • 2019-03-27
  • 2013-10-29
  • 2020-07-02
相关资源
最近更新 更多