将共享指针添加到向量时出错
Error while adding shared pointer to the vector
抽象基础class:
#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
混凝土子class:
#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
子class的实现:
#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);
我不明白它在说什么。
int addBuildingComponent(std::shared_ptr<BuildingOrg> _buildingOrg, std::string _type) const override;
中的const
是addBuildingComponent
不会改变BuildingComponent
的承诺。但是,它试图用 push_back()
...
修改成员变量 building_Org
从 addBuildingComponent()
中删除 const
应该可以修复错误。
错误信息的discards qualifiers
部分是指与成员函数的const
限定符冲突
与 C++ 模板相关的错误消息一开始可能非常难以解析,但通过练习确实会变得更容易:-)
您将 BuildingComponent::addBuildingComponent 方法定义为 const(即它不会更改成员变量),但您将传入的值添加到成员列表(即更改成员变量)。
addBuildingComponent()
是一种 const
方法。在其范围内,*this
是 const
,因此 this->building_Org
是 const
。
std::vector::push_back()
是非const
方法。所以它不能在向量为 const
.
的上下文中调用
抽象基础class:
#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
混凝土子class:
#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
子class的实现:
#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);
我不明白它在说什么。
int addBuildingComponent(std::shared_ptr<BuildingOrg> _buildingOrg, std::string _type) const override;
中的const
是addBuildingComponent
不会改变BuildingComponent
的承诺。但是,它试图用 push_back()
...
building_Org
从 addBuildingComponent()
中删除 const
应该可以修复错误。
错误信息的discards qualifiers
部分是指与成员函数的const
限定符冲突
与 C++ 模板相关的错误消息一开始可能非常难以解析,但通过练习确实会变得更容易:-)
您将 BuildingComponent::addBuildingComponent 方法定义为 const(即它不会更改成员变量),但您将传入的值添加到成员列表(即更改成员变量)。
addBuildingComponent()
是一种const
方法。在其范围内,*this
是const
,因此this->building_Org
是const
。std::vector::push_back()
是非const
方法。所以它不能在向量为const
. 的上下文中调用