C++: "Field 'object_var' must be initialized" 在 Base class 的构造函数中
C++: "Field 'object_var' must be initialized" in constructor of Base class
我正在用 C++ 编写多态程序,需要使用 Derived/Inherited classes。我的基础 class 称为 ClassA
,我的派生 class 称为 ClassB
。我有一个名为 varClass
的单独 class,它是我的 Base class、ClassA
的构造函数中参数的数据类型。我在 ClassA.cpp
:
中的以下构造函数中收到此错误消息
Field 'object_var' must be initialized
#include "ClassA.h"
#include "varClass.h"
ClassA::ClassA(const classVar &O, const int &p) {}
为什么必须先初始化来自单独具体 class 的 objects,然后才能将它们用作单独 class 中函数的参数?我曾尝试在 ClassA
中提出 classVar
class 的前向声明,但没有成功。如何解决此问题以允许来自单独 class 的数据类型参数?如果我给它一个初始化,我怎样才能确保传递给这个构造函数的每个值都是唯一的,而不只是被初始化值覆盖?
这是相关代码的其余部分。我不打算展示 Derived classes,因为我不认为它们是问题的一部分,但决定提及它们,因为我是一名新手程序员,这可能是问题所在。
// ClassA.h
#ifndef CLASSA_H
#define CLASSA_H
#include "varClass.h"
class ClassA {
protected:
const classVar &object_var; // The problem lies here
unsigned var1;
// ... more code follows
public:
ClassA(const object &O, const int &p);
// ... more code follows
};
#endif
Header 和 objectVar
class 的实现与问题无关。那class就是一个标准的具体class.
object_var
需要在构造函数中初始化,因为它是一个引用。没有其他方法可以让它指代某物。
你应该初始化 reference in the constructor's initializer list:
ClassA(const classVar &O, const int &p)
: object_var(O) {
}
P.S。确保头文件和源文件中构造函数的签名匹配。
我正在用 C++ 编写多态程序,需要使用 Derived/Inherited classes。我的基础 class 称为 ClassA
,我的派生 class 称为 ClassB
。我有一个名为 varClass
的单独 class,它是我的 Base class、ClassA
的构造函数中参数的数据类型。我在 ClassA.cpp
:
Field 'object_var' must be initialized
#include "ClassA.h"
#include "varClass.h"
ClassA::ClassA(const classVar &O, const int &p) {}
为什么必须先初始化来自单独具体 class 的 objects,然后才能将它们用作单独 class 中函数的参数?我曾尝试在 ClassA
中提出 classVar
class 的前向声明,但没有成功。如何解决此问题以允许来自单独 class 的数据类型参数?如果我给它一个初始化,我怎样才能确保传递给这个构造函数的每个值都是唯一的,而不只是被初始化值覆盖?
这是相关代码的其余部分。我不打算展示 Derived classes,因为我不认为它们是问题的一部分,但决定提及它们,因为我是一名新手程序员,这可能是问题所在。
// ClassA.h
#ifndef CLASSA_H
#define CLASSA_H
#include "varClass.h"
class ClassA {
protected:
const classVar &object_var; // The problem lies here
unsigned var1;
// ... more code follows
public:
ClassA(const object &O, const int &p);
// ... more code follows
};
#endif
Header 和 objectVar
class 的实现与问题无关。那class就是一个标准的具体class.
object_var
需要在构造函数中初始化,因为它是一个引用。没有其他方法可以让它指代某物。
你应该初始化 reference in the constructor's initializer list:
ClassA(const classVar &O, const int &p)
: object_var(O) {
}
P.S。确保头文件和源文件中构造函数的签名匹配。