2014-01-10 47 views
1

我正在嘗試獲取數組和矢量的交集。我決定讓它們成爲兩個載體,因爲它是cplusplus.com如何舉例說明的。調試斷言失敗 - 數組迭代器不兼容

這是錯誤消息我得到:

enter image description here

這裏是我的代碼:

enter image description here

getNumbers()函數返回一個數組。

編輯

這裏是getNumbers()功能 - 它只是返回相同的返回類型的屬性:

enter image description here

+3

我們可以看到'getNumbers'嗎?如果它返回一個數字的副本,這將解釋錯誤。 – templatetypedef

+0

新增'getNumbers' –

回答

3

此斷言通常意味着供應的開始和迭代器結束一個範圍參考不同的集合。

getNumbers()函數返回一個數組。

除非getNumbers()返回由參考陣列,並且還返回參考相同的數組,該初始化無效:

std::vector<unsigned int> ticketNumbers(getNumbers().begin(), getNumbers().end()); 

爲了使上述工作,getNumbers()必須反覆返回一個參考到相同的陣列。你的getNumbers返回一個副本,因爲它按值返回一個數組。

要解決此行,第一個電話getNumbers(),結果存儲在一個臨時變量tempNumbers,這樣

std::array<unsigned int, TICKET_BALL_COUNT> tempNumbers= getNumbers(); 
std::vector<unsigned int> ticketNumbers(tempNumbers.begin(), tempNumbers.end()); 

或者,你可以改變你的getNumbers()函數返回一個const參考,像這樣:

const std::array<unsigned int, TICKET_BALL_COUNT>& Ticket::getNumbers() const { 
    return _numbers; 
} 
+0

謝謝!這件作品完美 –

+0

@AdamCarter不客氣!看看第二個選擇,它也可以工作,並且會減少複製量。 – dasblinkenlight

+0

這也很好,謝謝。我是C++的新手,在函數名的兩側都有一個const關鍵字似乎很奇怪?這是標準做法嗎? –