无法实例化简单类

时间:2017-03-21 22:30:00

标签: c++ compiler-errors

有人可以告诉我我的代码有什么问题吗?我不理解编译器错误消息。 :(

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;
        }
    };

    /* ... */
};

ItemContainer.cpp:

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

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

  • ItemContainer.cpp(175):错误C2440:&#39;&#39;:无法转换为&#39; ItemContainer :: MyDerived *&#39;到&#39; ItemContainer :: MyBase&#39;
  • ItemContainer.cpp(175):注意:没有构造函数可以采用源类型,或构造函数重载解析不明确
  • ItemContainer.cpp(175):错误C2512:&#39; ItemContainer :: MyBase&#39;:没有合适的默认构造函数
  • ItemContainer.h(14):注意:请参阅&ItemContainer :: MyBase&#39;
  • 的声明

2 个答案:

答案 0 :(得分:1)

您有两个名为MyDerivedItemContainer::MyBase::MyDerivedItemContainer::MyDerived的课程。

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

使用高警告级别(/W4)进行编译可能会收到警告,并且省略class中的MyBase个关键字会导致出现不同的编译器错误更容易看到。

答案 1 :(得分:-1)

错误描述含糊不清(非常感谢Visual Studio)。 我想你想要实现新的MyBase对象。

MyBase* myBase = new MyBase(myDerivedPtr);

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

MyBase myBase(myDerivedPtr);