-1

今天我尝试实例化一个内部类,同时将我的外部类传递给它并且我在外部类的命名空间中:我正在使用 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”指针在这里不可用吗?我怎么能在这一点上超越自己呢?

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

我试图在应用程序中编写键绑定代码。要将函数传递给键,我使用 KeyFunction 类的“接口”(基类类似于它)。

我现在想给类(对象)声明它自己的 KeyFunction(Derived) 的可能性,更重要的是,用它传递 ressources(object),以使函数可以在它们上工作(因为我只能使用 void 指针,因为它们稍后存储在绑定的数组中)我已经使用其他代码完成了这项任务,但我认为这里发布的时间很长。通过实验,我偶然发现了这个问题。

4

1 回答 1

2

您的编译错误与您的类层次结构无关,但简单的事实是,这不是您构建类实例的方式。

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

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)
    {
    }
};
于 2016-05-14T15:23:37.147 回答