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。确保头文件和源文件中构造函数的签名匹配。