gpt4 book ai didi

c++ - 对象/指针 vector 的问题(实现复合设计模式)

转载 作者:行者123 更新时间:2023-11-30 00:42:19 29 4
gpt4 key购买 nike

我正在尝试为 uni practical 实现复合设计模式,我有一个抽象基类 DocumentComponent 和两个继承自它的类,TextBody 和 Word。它应该代表一个可以包含其他句子和/或单词的句子。当我尝试实现具有函数 addComponent 和 Print 的 TextBody 类时,我的问题出现了。他们应该使用 push_back 向 vector 添加一个新的 DocumentComponent 对象,并分别调用 vector 中每个元素的打印函数。我将我的对象存储在称为容器的 DocumentComponent 对象/指针的 vector 中,我一次只能让两者之一工作(通过将我的 vector 更改为指针 vector 或对象 vector )。如果我执行前者,我的 print 函数可以工作,但我的 addComponent 函数不起作用,如果是后者,情况就相反了。这是我的代码:

文档组件.h:

class DocumentComponent
{
public:
virtual void removeComponent(int index){}
virtual void addComponent(DocumentComponent& comp){}
virtual void print()=0;
};

文本主体.h:

class TextBody : public DocumentComponent
{
public:
TextBody();
virtual void addComponent(DocumentComponent& comp);
virtual void print();
private:
vector<DocumentComponent*> container;
};

文本主体.cpp:

void TextBody::addComponent(DocumentComponent& comp)
{
container.push_back(&comp);
}

void TextBody::print()
{
if (container.size() == 0)
return;
for_each(container.begin(), container.end(),mem_fun_ref(&DocumentComponent::print));
}

我收到错误信息

“无法在函数 for_each 中使用‘DocumentComponent *’初始化‘DocumentComponent &’

我的理解是因为当它需要引用时我给了它一个指针,但是将我的 vector 更改为对象 vector 会导致

“无法创建抽象类‘DocumentComponent’的实例”

在我的 addComponent 函数中

最佳答案

当你说:

void TextBody::addComponent(DocumentComponent& comp)
{
container.push_back(&comp);
}

指的是动态分配的东西吗?如果不是,您可能会遇到问题,如果是,您应该简单地传递一个指针。

关于c++ - 对象/指针 vector 的问题(实现复合设计模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327644/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com