有人可以告诉我我的代码有什么问题吗?我不理解编译器错误消息。 :(
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
}
编译器向我抛出以下错误:
答案 0 :(得分:1)
您有两个名为MyDerived
,ItemContainer::MyBase::MyDerived
和ItemContainer::MyDerived
的课程。
要解决此问题,请在class MyDerived;
的定义之前添加class MyBase
。
使用高警告级别(/W4
)进行编译可能会收到警告,并且省略class
中的MyBase
个关键字会导致出现不同的编译器错误更容易看到。
答案 1 :(得分:-1)
错误描述含糊不清(非常感谢Visual Studio)。
我想你想要实现新的MyBase
对象。
MyBase* myBase = new MyBase(myDerivedPtr);
或简单地说,是一个堆栈构造的对象
MyBase myBase(myDerivedPtr);