gpt4 book ai didi

c++ - 正确推送结构的 2D vector 的问题 (C++)

转载 作者:行者123 更新时间:2023-11-28 03:53:48 29 4
gpt4 key购买 nike

我在填充 vector<vector<clickable> > 类型的 vector 时遇到问题.编译器似乎可以推迟 vector<clickable>只要 push_back 发生在与变量声明相同的函数中,就可以使用它,但是当变量在 .h 文件中声明并且 push_back 在类的另一个函数中执行时,它不允许它。

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

有效示例(这是来自主函数,但它适用于任何函数。):

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);
}

无效示例:

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

图形化.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> > > > >]

最佳答案

错误信息说,实际上,它认为你正在尝试的 vector push_back onto 实际上是一个 vector<vector<string> > , 而不是 vector<vector<clickable> >如您所料。

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

关于c++ - 正确推送结构的 2D vector 的问题 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373674/

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