必须在构造函数基/成员初始值设定项列表中初始化对对象的引用 原谅我,我的C++有点生疏了。

必须在构造函数基/成员初始值设定项列表中初始化对对象的引用 原谅我,我的C++有点生疏了。,c++,inheritance,interface,reference,singleton,C++,Inheritance,Interface,Reference,Singleton,我正试图通过一个接口创建一个单例(这样,系统可以根据需要方便地在以后进行扩展) 我有以下界面: #ifndef IBUILD_CONFIGURATION_H #define IBUILD_CONFIGURATION_H *IBuildConfiguration.h* class IBuildConfiguration { public: virtual int foo(void) = 0; }; IBuildConfiguration& BCInstance(

我正试图通过一个接口创建一个单例(这样,系统可以根据需要方便地在以后进行扩展)

我有以下界面:

#ifndef IBUILD_CONFIGURATION_H
#define IBUILD_CONFIGURATION_H

*IBuildConfiguration.h*
class IBuildConfiguration
{
    public:
        virtual int foo(void) = 0;
};

IBuildConfiguration& BCInstance(void);

#endif /* IBUILD_CONFIGURATION_H */
以及以下混凝土等级:

BuildConfiguration.h

BuildConfigration.cpp

现在,我尝试使用对象,如下所示:

MyClass.h

MyClass.cpp


不幸的是,这会导致编译器错误“oFoo”:必须在构造函数基/成员初始值设定项列表中初始化,我无法弄清楚发生了什么。谢谢

遵循错误消息指示:

MyClass::MyClass() : oFoo(BCInstance())
{
}

遵循错误消息指示:

MyClass::MyClass() : oFoo(BCInstance())
{
}

您不能修改引用引用的内容。您只能对其进行初始化:

MyClass::MyClass() : oFoo(BCInstance())
{
}

您不能修改引用引用的内容。您只能对其进行初始化:

MyClass::MyClass() : oFoo(BCInstance())
{
}

为了添加其他人已经指出的内容,当程序进入构造函数主体时,类成员将已经被创建(通过其默认构造函数)。因此,类主体内的任何初始化都将调用赋值构造函数,因为对象已经创建

现在,由于引用无法重新初始化,在构造函数主体内分配引用将意味着重新初始化,因此编译器会标记一个错误,要求您在构造函数初始化列表中初始化引用。
初始化
const
成员和没有默认构造函数的类成员时也是如此。

要添加到其他人已经指出的内容中,当程序进入构造函数体时,将已经创建类成员(通过其默认构造函数)。因此,类主体内的任何初始化都将调用赋值构造函数,因为对象已经创建

现在,由于引用无法重新初始化,在构造函数主体内分配引用将意味着重新初始化,因此编译器会标记一个错误,要求您在构造函数初始化列表中初始化引用。 初始化
const
成员和没有默认构造函数的类成员时也是如此

MyClass::MyClass() : oFoo(BCInstance())
{
}
MyClass::MyClass() : oFoo(BCInstance())
{
}