gpt4 book ai didi

c++ - 将共享指针添加到 vector 时出错

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:24 25 4
gpt4 key购买 nike

抽象基类:

#ifndef BUILDINGORG_H
#define BUILDINGORG_H
#include <iostream>
#include <memory>
#include <vector>

class BuildingOrg
{

public:
BuildingOrg(int _id);
virtual int addBuildingComponent(std::shared_ptr<BuildingOrg> buildingOrg,
std::string _type) const;
virtual void removeBuildingComponent(std::shared_ptr<BuildingOrg> buildingOrg);
virtual void getInfo()=0;
private:
int id;
std::string type;
};

#endif // BUILDINGORG_H

具体子类:

#ifndef BUILDINGCOMPONENT_H
#define BUILDINGCOMPONENT_H
#include "buildingorg.h"

class BuildingComponent : public BuildingOrg
{
public:
BuildingComponent(int _id);
int addBuildingComponent(std::shared_ptr<BuildingOrg> _buildingOrg,
std::string _type) const override;
void removeBuildingComponent(std::shared_ptr<BuildingOrg> buildingOrg)
override;
void getInfo() override;
private:
std::vector<std::shared_ptr<BuildingOrg>> building_Org;
};

#endif // BUILDINGCOMPONENT_H

子类的实现:

#include "buildingcomponent.h"

BuildingComponent::BuildingComponent(int _id):
BuildingOrg(_id)
{
}

int BuildingComponent::addBuildingComponent(std::shared_ptr<BuildingOrg> _buildingOrg, std::string _type) const
{
building_Org.push_back(_buildingOrg);// I am having error here
return 1;
}

void BuildingComponent::removeBuildingComponent(std::shared_ptr<BuildingOrg> buildingOrg)
{

}

void BuildingComponent::getInfo()
{

}

当我尝试将共享指针放入我的 Vector 时,我得到了这个讨厌的错误;我真的不知道为什么会出现错误:

cpp:10: error: passing 'const std::vector<std::shared_ptr<BuildingOrg> >' as 'this' argument of 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::shared_ptr<BuildingOrg>; _Alloc = std::allocator<std::shared_ptr<BuildingOrg> >; std::vector<_Tp, _Alloc>::value_type = std::shared_ptr<BuildingOrg>]' discards qualifiers [-fpermissive]
building_Org.push_back(_buildingOrg);

我不明白它在说什么。

最佳答案

constint addBuildingComponent(std::shared_ptr<BuildingOrg> _buildingOrg, std::string _type) const override;是一个 promise addBuildingComponent不会改变BuildingComponent .然而,它试图修改成员变量building_Org。与 push_back() ...

删除 const来自 addBuildingComponent()应该修复错误。

discards qualifiers错误消息的一部分是指与 const 的冲突成员函数的限定符。

与 C++ 模板相关的错误消息一开始可能非常难以解析,但通过练习确实会变得更容易:-)

关于c++ - 将共享指针添加到 vector 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154909/

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