错误 C2259:"类":无法实例化抽象类
error C2259: 'class' : cannot instantiate abstract class
现在,我对抽象类有了很多了解,但是,我最近试图使用一个抽象类创建一个虚拟函数来接收消息,然后使用另一个具有指向该类的智能指针std::vector
的类,但后来我得到了错误C2259。(是的,我确实在这里查过(
旁注:
我最近也读了很多关于智能指针的文章,因为几乎(如果不是总是(在每个与指针有关的问题中都会提到它们。所以我决定第一次尝试实现它们,所以我的问题实际上可能是因为我对智能指针的使用不当。
无论如何,这里是纯抽象类本身——
//Component.h
namespace rpg
{
class Component
{
public:
virtual void Receive(rpg::Message message) = 0;
Component();
virtual ~Component();
};
这是一个在尝试使用纯抽象类时出错的类。
//ContainerObject.h
#include <vector>
#include <memory>
#include "Component.h"
namespace rpg
{
class ContainerObject
{
private:
//Create short name for a vector of smart pointers to the pure abstract class
typedef std::vector<std::shared_ptr<rpg::Component>> ComponentList;
//Create array of Components (std::vector).
ComponentList myComponents;
public:
//Send message to all Components in array (std::vector)
void Send(rpg::Message message)
{
if(myComponents.size() > 0)
{
for(int i = 0; i < myComponents.size(); i++)
{
if(myComponents[i] != NULL)
{
myComponents[i]->Receive(message);
}
}
}
} // end of Send()
//Add new Component to array (std::vector)
void AddComponentToMessageList(rpg::Component& component)
{
myComponents.push_back(std::make_shared<rpg::Component>(component));
}
ContainerObject();
~ContainerObject();
};
} //namespace rpg
首先,我正在努力练习更好的代码组织(我在这里学习了一些<——也是我获得大部分设计的地方(,如果我能保留它的话,我喜欢它的布局。我还在这里读到了一些关于纯抽象类的文章,我在页面底部看到,它们仍然声明了一个指向纯抽象类对象的指针列表,所以我很确定我可以这样使用它,那么为什么我会出现错误C2295,我该如何修复它呢?我可以在哪里实例化它,是什么导致它被实例化?
(我认为实例化这个词可能是真正让我困惑的部分,这就是为什么我也问它是什么原因造成的,所以如果你能把它也包括在你的答案中,那将不胜感激。(我确实在谷歌上搜索了它的定义;我仍然很困惑((
void AddComponentToMessageList(std::shared_ptr<rpg::Component>& component)
{
myComponents.push_back(component);
}
尝试这种方法,并在调用AddComponentToMessageList函数之前使用std::make_shared创建对象。我从未尝试过使用复制构造函数用智能指针实例化类。乍一看,它似乎应该起作用,但你永远不会知道。
另一个注意事项。比起抽象类,更喜欢接口。意思是创建一个看起来像这样的IComponent接口:
class IComponent
{
public:
virtual void Receive(rpg::Message message) = 0;
virtual ~Component() { };
};
然后让你的类实现这个接口。显然,您的向量需要更改,成为std::shared_ptr的容器。
现在我还注意到,无论是通过"new"、在堆栈上还是std::make_shared,都无法创建抽象类。
当您在以下行中调用make_shared
时,您正在尝试实例化组件:
myComponents.push_back(std::make_shared<rpg::Component>(component));
CCD_ 3尝试执行CCD_ 4,由于CCD_。
- ATL::CComContainedObject<contained>: C2259 无法实例化抽象类
- 如何使用其中一个具体类实例化抽象类?
- 无法实例化抽象类错误
- 无法实例化抽象类,但类不是抽象/派生方法的参数
- 'AMA::我的产品':无法实例化抽象类
- 无法实例化抽象类
- 如何修复错误C2259:无法实例化抽象类
- C++,不能实例化抽象类
- 无法使用多重继承 c++ 实例化抽象类
- 无法实例化抽象类
- C++,无法实例化抽象类错误
- C2259:'ATL::CComObject<Base>':无法实例化抽象类
- 错误 C2259:'CDocument':无法实例化抽象类
- 帮助错误 C2259:无法实例化抽象类
- 无法实例化抽象类
- 错误 C2259"类":无法实例化抽象类
- 不能实例化抽象类的对象,但必须返回该类的对象
- 继承错误 - 无法实例化抽象类 无法访问在类中声明的受保护成员
- 无法使用 c++11 实例化抽象类
- 创建 CTI 适配器时无法实例化抽象类