【发布时间】:2014-06-11 21:12:53
【问题描述】:
我有三个班级:
Class Something
{...}
Class A
{
public:
A();
virtual ~A() = 0; //have also tried this as non-abstract
std::vector< unique_ptr<Something> > somethings; //have tried this just as std::vector<Something*> as well
};
class B : public A
{
B();
...
}
如果我从 B 类中省略 std::vector
所以如果我重新添加它,我会尝试像这样引用它
A *a = new B();
for(auto it = a->somethings.begin(); it != a->somethings.end(); it++)
{
Draw((*it)->image,(*it)->x, (*it)->y, NULL, (*it)->angle);
}
它说 a->somethings 是空的......即使我从 B 本身打印来告诉我有多少“东西”,它也准确地报告了计数。这就是导致我删除 std::vector somethings; 的原因。从 B 类开始,因为我怀疑它以某种方式获取了 A 的向量,即使它是抽象的。
奖励:如果我去 B *b = new B(); 这一切都有效当我添加父类 A 并让 B 从它继承时刚刚坏了。
【问题讨论】:
-
somethings是私有的... -
@DrewDormann somethings 在我的代码中是公开的,就像 B : public A 一样,但我觉得它偏离了包含的意义。编辑:为了清楚起见,我已将其包括在内。这也很重要,因为 Draw 函数访问成员 something。
-
coliru.stacked-crooked.com/a/c2913bfcccbe407d - 我已经编译了一个例子
-
B类也有“东西”吗?如果是这样发布完整的代码
-
@zmartin 请在您的问题中发布真实代码。您问题中的代码没有出现您描述的问题。
标签: c++ inheritance vector polymorphism derived-class