无法实例化简单类
Can't instantiate simple class
有人
可以告诉我我的代码出了什么问题吗?我不明白编译器错误消息。:(
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' 的声明
您有两个类,分别称为 MyDerived
、ItemContainer::MyBase::MyDerived
和 ItemContainer::MyDerived
。
要解决此问题,请在class MyBase
的定义之前添加class MyDerived;
。
使用高警告级别(/W4
(进行编译可能会收到警告,而省略MyBase
中的class
关键字将导致不同的编译器错误,从而使问题更容易看到。
错误描述不明确(非常感谢Visual Studio(。我认为您想实例化新的MyBase
对象。
MyBase* myBase = new MyBase(myDerivedPtr);
或者简单地说,一个堆栈构造的对象
MyBase myBase(myDerivedPtr);
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 检查某些类型是否是模板类 std::optional 的实例化
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 模板化类构造函数的模板实例化
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 无法实例化简单类
- 有没有一种更简单的方法来实例化静态库
- 是实例化返回类型还是简单地赋值