可以用外部类初始化内部类

Initialize Inner Class with outer class this possible?

本文关键字:初始化 内部类 外部      更新时间:2023-10-16

今天,当我将外部类传递给一个内部类时,当我在外部类的命名空间中时,我试图实例化它:我使用的是Visual Studo 2013。代码如下:(观看^^)

class Base
{
public:
    virtual void foo(){ cout << "foo" };
};
class object
{
    class Derived : public Base
    {
        object& o;
    public:
        Derived(object& o) : o(o){}
        virtual void foo(){ cout << "bar" };
    }derived(*this);
//          ^^^^^^
};

就我测试的情况而言,继承某物的派生类对本例没有任何影响。(此处仅出于上下文原因,请参阅下文)

在这个^^点上,我收到错误:没有合适的默认构造函数可用

Intellisense警告我,它需要类型规范。我也试着传递一个指针(当然我当时也改变了构词),但反应是一样的。对于protokoll,我现在尝试了很多变体和研究,但我无法找到一个明确的答案来解决我的问题。

"this"指针在这里不可用吗?在这一点上,我怎么能超越自己呢?

背景(仅当您感兴趣时):

我试图在应用程序中编写用于键绑定的代码。通过键的函数i使用KeyFunction(Base)类的"接口"类与之相似)。

我现在想让类(对象)有可能声明它拥有KeyFunction(派生),更重要的是,传递资源(对象)有了它,在某种程度上,函数可以在它们上工作(因为我只能使用void指针,因为它们稍后会存储在绑定)我已经用其他代码完成了这项任务,我认为不过,我很想在这里发帖。通过试验,我偶然发现这个问题。

编译错误与类层次结构无关,而是与一个简单的事实有关,即构建类实例不是这样的。

尝试实际声明一个类成员和一个类构造函数:

class Base
{
public:
    virtual void foo(){ }
};
class object
{
    class Derived : public Base
    {
        object& o;
    public:
        Derived(object& o) : o(o){}
        virtual void foo(){ }
    };
    Derived derived;
    object() : derived(*this)
    {
    }
};