我如何调用 class 的 object 继承另一个 class 在其构造函数中有参数?

How do I call an object of a class that inherits another class that has arguments in its constructor?

我正在处理多个 classes 和文件,所以我创建了这个虚拟代码来更好地定义我的问题。我有一个 parent class Parent 和一个 child class Child。我将这两个文件分开放在 .h 和 .cpp 文件中

parent.h

class Parent
{
    Parent(int a, int b, int c);
    protected:
        void somefunc();
         
};

parent.cpp

#include<iostream>
#include "parent.h"

Parent::Parent(int a, int b, int c)
{
    std::cout<<"Answer is: "<<a+b+c;
}
void Parent::somefunc()
{
    std::cout << "I am some func";
}

child.h

#include "parent.h"
class Child : public Parent
{
    public:
    void funk();
};

child.cpp

    #include"child.h"    
    void Child::funk()
    {
        somefunc();
    }

我正在使用另一个文件 running.cpp 来 运行 这个。

    #include "child.h"
    int main()
    {
        Child a;
        a.funk();
        return 0;
    }

尝试使用 g++ 构建它时出现错误:

running.cpp: In function ‘int main()’:
running.cpp:4:11: error: use of deleted function ‘Child::Child()’
     Child a;
           ^
In file included from running.cpp:1:0:
child.h:2:7: note: ‘Child::Child()’ is implicitly deleted because the default definition would be ill-formed:
 class Child : public Parent
       ^~~~~
child.h:2:7: error: no matching function for call to ‘Parent::Parent()’
In file included from child.h:1:0,
                 from running.cpp:1:
parent.h:3:5: note: candidate: Parent::Parent(int, int, int)
     Parent(int a, int b, int c);
     ^~~~~~
parent.h:3:5: note:   candidate expects 3 arguments, 0 provided
parent.h:1:7: note: candidate: constexpr Parent::Parent(const Parent&)
 class Parent
       ^~~~~~
parent.h:1:7: note:   candidate expects 1 argument, 0 provided
parent.h:1:7: note: candidate: constexpr Parent::Parent(Parent&&)
parent.h:1:7: note:   candidate expects 1 argument, 0 provided

我使用的 g++ 命令是 g++ *.cpp -o test

我知道我应该以某种方式向 运行 Parent 的构造函数提供参数,但我不确定该怎么做。

  1. 如何摆脱这个错误?
  2. 如果错误与此无关,我如何在 Child Class 继承 class 时创建一个 object 并在其中包含参数构造函数?我还需要调用参数构造函数,所以我不能只创建另一个空白构造函数并使用它。

How do I get rid of this error?

您可以通过在 class Parent 中添加默认构造函数来 解决 这个错误,如下所示。另外,请注意,您需要使构造函数 public.

parent.h

class Parent
{   public: //ADDED PUBLIC KEYWORD
        Parent(int a, int b, int c);
        //ADD DEFAULT CONSTRCUTOR
        Parent()=default;
    protected:
        void somefunc();
         
};