初始化基类,派生类的构造函数中没有默认构造函数
Initialize base class with no default constructor in constructor of derived class
我正在尝试创建一个子类secondary
,它可以与参数一起使用,也可以覆盖类primary
。现在我得到
没有要调用的匹配函数
错误。有人可以帮助我吗?
我的代码:
主要.h:
#ifndef PRIMARY_H
#define PRIMARY_H
class primary
{
public:
primary(int x);
virtual ~primary();
protected:
private:
int primary_x;
};
#endif // PRIMARY_H
主要.cpp:
#include "primary.h"
primary::primary(int x)
{
primary_x = x;
}
primary::~primary()
{
//dtor
}
中学.h:
#ifndef SECONDARY_H
#define SECONDARY_H
#include "primary.h"
class secondary : public primary
{
public:
secondary();
virtual ~secondary();
protected:
private:
};
#endif // SECONDARY_H
中学.cpp:
#include "secondary.h"
secondary::secondary()
{
//ctor
}
secondary::~secondary()
{
//dtor
}
因为你没有默认的构造函数,编译器抱怨它不能为primary
创建一个对象,你应该向secondary
构造函数添加一个参数/给它一个默认值:
class secondary : public primary
{
public:
secondary(int x);
virtual ~secondary();
protected:
private:
};
然后调用基类构造函数:
secondary::secondary(int x) : primary(x)
{
//ctor
}
或:
secondary::secondary() : primary(5)
{
//ctor
}
或者只是为primary
添加一个默认构造函数:
class primary
{
public:
primary(int x);
primary() : primary_x(0) {}
virtual ~primary();
protected:
private:
int primary_x;
};
整个问题看起来像你想做某事,但在编写代码的过程中你忘记了它是什么。
primary
的构造函数期望一个int
,但它没有得到它,因为
secondary::secondary() { }
相当于:
secondary::secondary() : primary() { }
编译器尝试默认构造primary
,但它不是默认构造的。因为您声明了一个采用int
构造函数,所以编译器不再生成默认构造函数。
解决 方案:
修改派生类的构造函数:
secondary::secondary() : primary(10) { } // dummy value
或者模仿基类构造函数的签名:
secondary::secondary(int x) : primary(x) { }
修改基类 - 使
primary
默认可构造,即将构造函数声明为:primary(int x = 10) // dummy default argument
或添加默认构造函数重载:
primary() = default;
public:
secondary();
还应该取一个整数:
public:
secondary(int x);
然后是CTOR定义:
secondary::secondary(int x) : primary(x)
{
//ctor
}
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 初始化具有非默认构造函数的std::数组项的更好方法
- 具有默认模板类型的默认构造函数的类型推导
- 如何使用非默认构造函数实例化模板化类
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 声明没有默认构造函数的字段
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 没有默认构造函数作为模板参数的自定义比较器
- C++17 没有默认构造函数的地图放置(私有默认构造函数)
- 使用移动调用对等构造函数unique_ptr默认构造函数
- C++复制构造函数和默认构造函数
- 将向量从 N1 缩小到 N2 项,而不触发默认构造函数并仅使用 move 语义
- 构造函数默认公共和私有变量
- 类模板构造函数默认参数
- 构造函数默认参数
- C++模板构造函数默认参数
- 在c++中设置构造函数默认值
- c++构造函数默认参数
- C++构造函数默认值头文件