今天,当我将外部类传递给一个内部类时,当我在外部类的命名空间中时,我试图实例化它:我使用的是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)
{
}
};