正确推送结构的2D向量的问题(C ++)

时间:2010-12-07 05:27:27

标签: c++ vector struct multidimensional-array

我无法填写vector<vector<clickable> >类型的向量。只要push_back发生在与变量声明相同的函数中,编译器似乎可以将vector<clickable>推回到它上面,但是当变量在.h文件中声明时它不允许它并且push_back在类的另一个函数中执行。

在下面的示例中,循环应该完全相同,除了一个调用刚刚在同一函数中声明的vector<vector<clickable> >上的push_back,另一个调用.h文件中声明的一个上的push_back

什么有效的例子(这是来自main函数,但它适用于任何函数。):

vector<vector<clickable> > clicks;
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"));
    }
    clicks.push_back(click);
}

不起作用的示例:

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;
    //...
}

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.cpp:47: error: no matching function for call to ‘std::vector<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::push_back(std::vector<clickable, std::allocator<clickable> >&)’ /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:602: note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Alloc = std::allocator<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >]

1 个答案:

答案 0 :(得分:2)

错误消息实际上表示它认为您尝试push_back的向量实际上是vector<vector<string> >,而不是您期望的vector<vector<clickable> >。< / p>

您可能只需要进行干净的重建。