簡體   English   中英

通過引用傳遞列表時出錯(C ++)

[英]Error when passing list by reference (C++)

我正在嘗試用C ++編寫一個子程序,將一個單元格的位置放在一個正方形網格上並返回其鄰居的列表,因此對於大多數單元格,它將返回4個鄰居,但邊緣上的單元格只有3個並且在角落里只有2個。我不是一個非常熟練的C ++程序員,所以我在這里找了一些幫助,通過引用傳遞列表C ++傳遞列表作為函數的參數 )。

我收到此錯誤:

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

導致錯誤的行似乎是這一行:case 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);}

案例標簽應為常量表達式。

s是array( int[] ), neighbours.push_back取單個int 在示例中使用neighbours.push_back(s[0])neighbours.push_back(s[1])或任何東西,什么是int

一個天真的事情是一次在一行上添加每個鄰居。 我們不能在switch語句中使用像xSIZE這樣的非常量表達式。 這使得代碼非常長,並且迫切需要將其重構為更整潔的東西,但這是一個開始。 我也會返回列表而不是通過引用傳遞它:

list<int> 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};
  if(x == 0)
  {
    neighbours.push_back(s[0]);
    neighbours.push_back(s[1]);
  }
  else if (x == xSIZE-1)
  {
    neighbours.push_back(n[0]);
    neighbours.push_back(n[1]);
  }
  else
  {
    neighbours.push_back(s[0]);
    neighbours.push_back(s[1]);
    neighbours.push_back(n[0]);
    neighbours.push_back(n[1]);
  }

  if(y == 0)
  {
    neighbours.push_back(e[0]);
    neighbours.push_back(e[1]);
  }
  else if (y == ySIZE-1)
  {
    neighbours.push_back(w[0]);
    neighbours.push_back(w[1]);
  }
  else
  {
    neighbours.push_back(e[0]);
    neighbours.push_back(e[1]);
    neighbours.push_back(w[0]);
    neighbours.push_back(w[1]);
  }
  return neighbours;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM