我收到错误,它发生在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&lt; _Tp,_Alloc&gt; :: _ M_insert_aux(std :: vector&lt; _Tp,_Alloc&gt; :: iterator,const _Tp&amp;)[with _Tp = Chest_objects; _Alloc = std :: allocator; std :: vector&lt; _Tp,_Alloc&gt; :: iterator = __gnu_cxx :: __ normal_iterator&gt ;; typename std :: _ Vector_base&lt; _Tp,_Alloc&gt; :: pointer = Chest_objects *]':|
错误:'std :: ios_base :: ios_base(const std :: ios_base&amp;)'是私有的|
答案 0 :(得分:2)
push_back
方法要求容器中包含的类型是可复制的。该错误意味着Chest_objects
类只有一个私有构造函数。因此,请检查Chest_objects
是否有:
Chest_objects(const Chest_objects&);
Chest_objects& operator=(const Chest_objects& rhs);
并且他们都是public
。
另一种可能性是你从Chest_objects
中的一个类中继承<iostream>
,这是不推荐的,并且编译器看到一个构造函数,std::ios
标记为private
,这意味着你无法实例化或子类化它。这可能发生在单身人士身上。
但是没有办法确定,因为你没有发布所有代码。此外,在发布代码之前,尝试尽可能多地删除代码,同时保留错误。
有你的问题:
ifstream small_obj_map;
您在对象中实例化ifstream
。 Chest_vect
中的每个对象都有自己的ifstream
。这几乎肯定不是你想要的。
由于您尚未编写复制构造函数或复制运算符,因此编译器正在尝试为您创建它们。默认的复制构造函数将尝试从正在复制的对象的small_obj_map
构造small_obj_map
。但是ifstream
has no copy constructor因为并不打算复制。
您应该只在需要时在需要它的方法内创建ifstream
,并在方法退出时将其销毁。它不应该是对象的一部分,因为它不需要持久保存对象。