我试图创建一个子类secondary
,它可以与参数一起使用,也可以覆盖类primary
。现在我得到
没有匹配的功能来调用
错误。有人能帮助我吗?
我的代码:
primary.h:
#ifndef PRIMARY_H
#define PRIMARY_H
class primary
{
public:
primary(int x);
virtual ~primary();
protected:
private:
int primary_x;
};
#endif // PRIMARY_H
primary.cpp:
#include "primary.h"
primary::primary(int x)
{
primary_x = x;
}
primary::~primary()
{
//dtor
}
secondary.h:
#ifndef SECONDARY_H
#define SECONDARY_H
#include "primary.h"
class secondary : public primary
{
public:
secondary();
virtual ~secondary();
protected:
private:
};
#endif // SECONDARY_H
secondary.cpp:
#include "secondary.h"
secondary::secondary()
{
//ctor
}
secondary::~secondary()
{
//dtor
}
答案 0 :(得分:2)
因为您没有默认构造函数,编译器会抱怨它无法为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;
};
答案 1 :(得分:1)
这整个问题看起来像你想做某事,但在编写代码的过程中你忘记了它是什么。
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
或添加default-constructor重载:
primary() = default;
答案 2 :(得分:0)
TimerTask
也应该取一个整数:
public:
secondary();
然后ctor定义:
public:
secondary(int x);