C++ 正确推送结构的二维向量(C+;+;)时出现问题
我无法填充C++ 正确推送结构的二维向量(C+;+;)时出现问题,c++,vector,struct,multidimensional-array,C++,Vector,Struct,Multidimensional Array,我无法填充vector类型的向量。编译器似乎可以将vector推回到它上面,只要推回发生在与变量声明相同的函数中,但当变量在.h文件中声明并且推回在类的另一个函数中执行时,编译器不允许这样做 在下面的示例中,循环应该完全相同,除了一个调用push_返回在同一个函数中刚刚声明的向量,另一个调用push_返回在.h文件中声明的向量 工作原理示例(这来自主函数,但适用于任何函数): 矢量点击; 对于(int i=0;i
vector
类型的向量。编译器似乎可以将vector
推回到它上面,只要推回发生在与变量声明相同的函数中,但当变量在.h文件中声明并且推回在类的另一个函数中执行时,编译器不允许这样做
在下面的示例中,循环应该完全相同,除了一个调用push_返回在同一个函数中刚刚声明的向量
,另一个调用push_返回在.h文件中声明的向量
工作原理示例(这来自主函数,但适用于任何函数):
矢量点击;
对于(int i=0;i<10;i++){
矢量点击;
对于(int j=0;j<10;j++){
单击。向后推(可单击(点(50,50),5,10),“blar”);
}
点击。向后推(点击);
}
不起作用的示例:
Gui.h:
#include <vector>
//...
struct clickable {
Rect rect;
string msg;
bool visible;
clickable(Rect rectangle, string message){
rect = rectangle;
msg = message;
visible = true;
}
};
//...
class Gui{
public:
//...
void load_environment();
//...
private:
vector<vector<clickable> > ship;
//...
}
#包括
//...
结构可点击{
Rect-Rect;
串味精;
布尔可见;
可单击(矩形、字符串消息){
矩形=矩形;
msg=消息;
可见=真实;
}
};
//...
Gui类{
公众:
//...
无效加载_环境();
//...
私人:
矢量船;
//...
}
Gui.cpp:
#include "Gui.h"
//...
void Gui::load_environment(){
for(int i = 0; i < 10; i++){
vector<clickable> click;
for(int j = 0; j < 10; j++){
click.push_back(clickable(Rect(Point(50,50),5,10),
"blar"));
}
ship.push_back(click);
}
}
//...
#包括“Gui.h”
//...
void Gui::load_environment(){
对于(int i=0;i<10;i++){
矢量点击;
对于(int j=0;j<10;j++){
点击。向后推(可点击(点(50,50),5,10),
"废话";;
}
发货。向后推_(单击);
}
}
//...
我想这可能与我没有使一些操作符过载有关,但我实际上不知道这是否是问题的原因,或者如果是的话,我应该过载什么
编辑
以下是错误的文本:
Gui.cpp:47:错误:调用“std::vector::push_back(std::vector&)”时没有匹配的函数
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../../../../../include/c++/4.1.2/bits/stl_vector.h:602:注:候选项为:void std::vector::push_back(const _Tp&)[with _Tp=std::vector,_Alloc=std::allocator]
错误消息实际上表明,它认为您试图将推回的向量实际上是向量,而不是您所期望的向量
你可能只需要做一次干净的重建。哇,我真是太蠢了。我传递了一个向量
,也称为ship
(我从粘贴的代码中省略了该向量,以避免太多信息)。我还没有开始用它做任何事情,所以我想我忘了它。可悲的是,我已经为此困惑了约24小时。
#include "Gui.h"
//...
void Gui::load_environment(){
for(int i = 0; i < 10; i++){
vector<clickable> click;
for(int j = 0; j < 10; j++){
click.push_back(clickable(Rect(Point(50,50),5,10),
"blar"));
}
ship.push_back(click);
}
}
//...