我正在尝试用 C++ 编写一个子例程来获取一个单元格在方形网格上的位置并返回其邻居的列表,因此对于大多数单元格它将返回 4 个邻居,但边缘上的单元格只会有 3 个,角落里只有 2 个。我不是一个非常熟练的 C++ 程序员,所以我在这里查找了一些帮助,以通过引用传递列表 (C++ pass list as a parameter to a function)。
我收到这个错误:
In function ‘void findNeighbours(int, int, int, int, std::list<int, std::allocator<int> >&)’:
error: invalid conversion from ‘int*’ to ‘int’
这是我的代码:
void findNeighbours(int x, int y, int xSIZE, int ySIZE, list<int>& neighbours){
int n[2]={x-1,y};
int e[2]={x,y+1};
int s[2]={x+1,y};
int w[2]={x,y-1};
switch(x){
case 0: {neighbours.push_back(s);}
case xSIZE-1: {neighbours.push_back(n);}
default: {neighbours.push_back(n);neighbours.push_back(s);}
}
switch(y){
case 0: {neighbours.push_back(e);}
case ySIZE-1: {neighbours.push_back(w);}
default: {neighbours.push_back(e);neighbours.push_back(w);}
}
}
导致错误的行似乎是这一行: 案例 0:{neighbours.push_back(s);}
但我看不出我在做什么与我查找的示例(上面链接)不同。
正如我所说,我不是最精通 C++ 的编码人员,所以请尽可能用简单的语言进行解释。我习惯使用 Python,所以我不太擅长指针等。
预先感谢您的帮助,
FJC
最佳答案
变量 s 被定义为两个元素的数组
int s[2]={x+1,y};
虽然列表的值类型是int类型
list<int>& neighbours
你正在尝试 push_back 数组而不是 int 类型的对象
case 0: {neighbours.push_back(s);}
我认为至少由于这个奇怪的陈述,无论如何该函数都没有意义
case xSIZE-1: {neighbours.push_back(n);}
案例标签应为常量表达式。
关于c++ - 按引用传递列表时出错 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25403228/