【发布时间】:2014-07-19 02:04:18
【问题描述】:
现在,我对抽象类有了很多了解,但是,我最近尝试使用抽象类来创建一个虚函数来接收消息,然后是另一个具有std::vector 智能指针的类这个类,但后来我得到了错误 C2259。 (是的,我确实查过here)
旁注:
我最近也阅读了大量有关智能指针的内容,因为在与指针相关的每个问题中几乎(如果不是总是)都提到了它们。所以我决定第一次尝试实现它们,所以我的问题实际上可能是因为我对智能指针的使用不当。
不管怎样,这里是纯抽象类本身——
//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
首先,我正在尝试练习更好的代码组织(我正在学习一些here here 的内容,我在页面底部附近看到他们仍然声明了一个指向纯抽象类对象的指针列表,所以我很确定我可以这样使用它,所以为什么我收到错误 C2295,我该如何解决?我可能在哪里实例化它,是什么导致它被实例化?
(我认为实例化一词可能是真正让我感到困惑的部分,这就是为什么我还问是什么原因造成的,所以如果你也可以在你的答案中包含它,那将不胜感激。(我确实谷歌了它的定义; 我还是一头雾水))
【问题讨论】:
标签: c++ oop abstract-class smart-pointers