无法实例化简单类

Can't instantiate simple class

本文关键字:简单 实例化      更新时间:2023-10-16
有人

可以告诉我我的代码出了什么问题吗?我不明白编译器错误消息。:(

ItemContainer.h:

class ItemContainer
{
    class MyBase
    { // <- Line 14
    public:
        bool bIsPointer;
        class MyDerived* instancePtr;
        MyBase(class MyDerived* ptr)
        {
            bIsPointer = true;
            instancePtr = ptr;
        }
    };
    class MyDerived : public MyBase
    {
    public:
        MyDerived() : MyBase(nullptr)
        {
            bIsPointer = false;
        }
    };
    /* ... */
};

项目容器.cpp:

void ItemContainer::Test()
{
    MyDerived * myDerivedPtr;
    MyBase myBase = MyBase(myDerivedPtr); // <- Line 175
}

编译器向我抛出以下错误:

    ItemContainer
  • .cpp(175(:错误 C2440:":":无法从"ItemContainer::MyDerived *"转换为"ItemContainer::MyBase">
  • ItemContainer.cpp(175(:注意:没有构造函数可以采用源类型,或者构造函数重载分辨率不明确
  • 项容器.cpp (175(: 错误 C2512: "项容器::我的基地": 没有适当的默认构造函数可用
  • ItemContainer.h(14(: 注意:参见 'ItemContainer::MyBase' 的声明

您有两个类,分别称为 MyDerivedItemContainer::MyBase::MyDerivedItemContainer::MyDerived

要解决此问题,请在class MyBase的定义之前添加class MyDerived;

使用高警告级别(/W4(进行编译可能会收到警告,而省略MyBase中的class关键字将导致不同的编译器错误,从而使问题更容易看到。

错误描述不明确(非常感谢Visual Studio(。我认为您想实例化新的MyBase对象。

MyBase* myBase = new MyBase(myDerivedPtr);

或者简单地说,一个堆栈构造的对象

MyBase myBase(myDerivedPtr);