我如何调用 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 的构造函数提供参数,但我不确定该怎么做。
- 如何摆脱这个错误?
- 如果错误与此无关,我如何在 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();
};
我正在处理多个 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 的构造函数提供参数,但我不确定该怎么做。
- 如何摆脱这个错误?
- 如果错误与此无关,我如何在 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();
};