2014-09-04 60 views
-1

我將團隊視爲Team對象的數組,匹配的是Team對象內的Match對象的數組。 thisMatch被宣佈爲:無法將指針的值更改爲等於另一個指針

Match* thisMatch = new Match(); 

這就是我想要做的事:

&(teams[i].matches[foundMatches]) = thisMatch; 
// I also tried another method: 
(tams[i].matches + foundMatches) = thisMatch; 

其中foundMatches是一個int。

但是,無論我做什麼,我不斷收到此編譯器錯誤:

error: lvalue required as left operand of assignment 
       &teams[i].matches[foundMatches] = thisMatch; 
               ^

任何人有任何想法,以什麼可能會錯了嗎?如果需要,我可以提供更多信息,但我認爲大部分內容都不相關。

+0

如何聲明'匹配'? – braindf 2014-09-04 00:53:29

+0

'teams [i] .matches = new Match [num];' – chaiv 2014-09-04 00:55:20

+0

在這種情況下'matches'是一個指向數組的指針,而不是指針數組。你想要哪一個? – 2014-09-04 00:57:19

回答

1

你要做的是將一個變量分配給一個常量值。 teams[i].matches[foundMatches]的地址已經預先定義(在您聲明數組時)並且無法更改。

什麼是你試圖做的是相當改變teams[i].matches[foundMatches]內容(進一步我想這是因爲你說比賽是比賽的對象數組內的團隊對象一個Match對象)。改變內容可以通過以下方式完成:teams[i].matches[foundMatches] = *thisMatch即將thisMath的內容*thisMath分配給數組條目。

除非你是不是之前或之後的,不能做teams[i].matches[foundMatches]直接任意操作使用thisMath,你可以去用teams[i].matches[foundMatches] = Match()和實例化對象,而不是分配內存並將其複製到teams[i].matches[foundMatches]迫使後記解除分配以及。

注意:確保您有一個在Match類中執行的CTOR/CCTOR,因爲副本將涉及一個。

+0

這清除了我,謝謝! – chaiv 2014-09-04 01:04:07

+1

但是,當然不需要'new'。只要'team [i] .matches [foundMatches] = Match();' – 2014-09-04 01:05:16

+0

@BenjaminLindley爲真,但OP沒有指定在路上對thisMath沒有任何改變。 – 2014-09-04 01:06:59

0
teams[i].matches[foundMatches] = thisMatch; 

如果matches是假設包含指針數組來比賽,它應該聲明:

team[i].matches = new (Match*)[num]; 

接着上面的分配:

Match **matches; 

您應該然後將它分配將工作。

+0

當你使用下標符號時,它解引用數組對象,我得到這個錯誤:'error:no匹配'operator ='(操作數類型是'Match'和'Match *')' – chaiv 2014-09-04 00:54:05

+0

我必須假設它是如何聲明的。如果您需要更多幫助,請顯示「Team」的聲明。 – Barmar 2014-09-04 00:55:10

+1

如果'matches'是類型'Match *',那麼該分配會嘗試從'Match *'分配給'Match'。在大多數正常的班級中,不,這是行不通的。 – 2014-09-04 00:57:16