在接口(C ++)中调用已删除的构造函数

时间:2018-12-16 18:21:40

标签: c++ inheritance interface

在test123_interface.h中为我提供了以下接口,我很难创建使用该接口的类:

class test123_interface {
public:
    test123_interface() = delete;

    explicit test123_interface(unsigned int t123_int){};
    virtual ~test123_interface() = default;

private:
    unsigned int t123_int;
};

在我的test123.h中,我有:

#include "test123_interface.h"

class test123 : test123_interface {
public:

    test123(unsigned int t123_int){};
    virtual ~test123() = default;

private:
    unsigned int t123_int;
};

然后在我的test123.cpp中,我有:

#include "test123.h"

test123::test123(unsigned int t123) {
  this->t123_int = t123;
}

但是由于以下错误,我无法编译:“调用已删除的'test123_interface'构造函数”

我的理解中我缺少什么,以便编译器不知道我想使用以无符号int作为参数的构造函数?

1 个答案:

答案 0 :(得分:3)

在您的通话中:

test123(unsigned int t123_int){}

这正在调用已删除的构造函数。相反,请调用适当的构造函数,即您要使用的构造函数:

test123(unsigned int t123_int): test123_interface(t123_int){}

如果要在cpp文件中定义它,请执行以下操作:

test123::test123(unsigned int t123): test123_interface(t123_int) {
}

在标题中:

test123(unsigned int t123_int);

您不能在标头和源文件中都定义构造函数!