gpt4 book ai didi

c++ - 我的代码中出现 'base(const std::ios_base)' is private 错误。它有什么问题?

转载 作者:行者123 更新时间:2023-11-30 02:49:59 24 4
gpt4 key购买 nike

我收到一个错误,它发生在 Chest_vect.push_back(newChest) 行;据我所知,我没有发现任何问题。但我确定我可能错过了一些小东西。如果您能提供帮助,我们将不胜感激!无论哪种方式,谢谢!

class Chest_objects {

private:
int loc_x, loc_y;
int map_x, map_y;
string obj_name = "";
string obj_id = "";
bool obj_trigger = false;
bool obj_visible = false;

public:

void setLoc_x(int x)
{
loc_x = x;
}
void setLoc_y(int y)
{
loc_y = y;
}
//OTHER GETTER AND SETTER FUNCTIONS NOT INCLUDED

Chest_objects(int x, int y); //CONSTRUCTOR FUNCTIONS: NOTE I DON'T HAVE A COMPLETE ONE
Chest_objects();
Chest_objects(int x, int y, int my, int mx, string name, string id, bool trig, bool vis);

int getChestVect(vector<Chest_objects>& Chest_vect, const char*getFile)
{
int amount = 0;
int get_x = 0;
int get_y = 0;
int max_x;
int max_y;
char get_info;
ifstream file;
file.open(getFile);
file >> max_x >> max_y;

while(get_info != '0')
{
file >> get_info;
if(get_info == '.')
{
get_x++;
}
if(get_info == 'B')
{
Chest_objects newChest(get_x, get_y);
Chest_vect.push_back(newChest);
get_x++;
amount++;
}
if(get_x >= max_x)
{
get_x = 0;
get_y++;
}

}
return amount;
}
};

int main()
{
... blah
return 0;
}

Chest_objects::Chest_objects(int x, int y)
{
loc_x = x;
loc_y = y;
}

Chest_objects::Chest_objects()
{
loc_x = 0;
loc_y = 0;
}

错误:在 'void std::vector<_Tp, _Alloc>::_M_insert_aux(std::vector<_Tp, _Alloc>::iterator, const _Tp&) 实例化中 [with _Tp = Chest_objects; _Alloc = std::分配器; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator >;类型名 std::_Vector_base<_Tp, _Alloc>::pointer = Chest_objects*]':|

错误:'std::ios_base::ios_base(const std::ios_base&)' 是私有(private)的|

最佳答案

push_back方法要求容器中包含的类型是可复制的。该错误暗示 Chest_objects类只有一个私有(private)构造函数。所以检查 Chest_objects有:

  • 复制构造函数:Chest_objects(const Chest_objects&);
  • 复制运算符(operator):Chest_objects& operator=(const Chest_objects& rhs);

并且它们都是 public .

另一种可能性是您将 Chest_objects 子类化来自 <iostream> 中的一个类(class),这是不推荐的,并且编译器看到一个采用 std::ios 的构造函数标记为private ,这意味着您不能实例化或子类化它。这可能发生在单例身上。

但是没有办法确定,因为您没有发布所有代码。此外,在发布代码之前,请尝试在保留错误的情况下尽可能多地删除代码。


这是你的问题:

ifstream small_obj_map;

您正在实例化一个 ifstream对象内部。 Chest_vect 中的每个对象会有自己的ifstream .这几乎肯定不是您想要的。

由于您尚未编写复制构造函数或复制运算符,因此编译器会尝试为您创建它们。而默认的拷贝构造函数会尝试构造small_obj_map。来自 small_obj_map被复制的对象。但是ifstream has no copy constructor因为它不是用来复制的。

您应该改为创建 ifstream只有当你需要它的时候,在需要它的方法里面,让它在方法退出的时候销毁。它不应该是对象的一部分,因为它不需要与对象保持一致。

关于c++ - 我的代码中出现 'base(const std::ios_base)' is private 错误。它有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20852133/

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