2015-05-17 143 views
-1

這是主要的:如何通過引用傳遞數組?

test.Begin(static_cast<Start::Person>(player[NUM_PLAYERS]), NUM_PLAYERS); 

「的static_cast」的紅色下劃線,而當我鼠標懸停它說:

錯誤:從「開始::人」「開始沒有合適的轉換功能::人*」的存在

這是start.h:

void Begin (Person *, int); 

這是start.cpp

void Start::Begin (Person *player[4], int NUM_PLAYERS) 

「開始」從start.cpp以紅色下劃線,而當我鼠標懸停在上面,錯誤說:

錯誤:聲明是「無效開始不相容::開始(開始::人* INT)」

之後,我已經展示了start.h線的位置

+0

你只需要通過參考權傳遞一個數組?爲什麼靜態投射?使用通常的方法'&',要麼我沒有得到你的問題。 –

+1

你的start.h和start.cpp太不一樣了。一個指針!= 4個指針。在考慮main之前先解決這個問題(數組沒有通過索引傳遞,特別是沒有超出範圍的索引)。我建議在繼續之前閱讀一本好的C++書。 – deviantfan

回答

1
// assunimg 'player' is an array 
test.Begin(player, NUM_PLAYERS); // no cast 

start.h:

void Begin (Person [], int); 

start.c:

void Start::Begin (Person player[], int NUM_PLAYERS) 
0

第二個錯誤是因爲你的Begin定義不爲Begin匹配您的聲明。你的聲明通過了Person*,而你的定義是接受Person的數組4。您可以通過更改您的定義(在您的.cpp文件中)來解決此問題:

void Start::Begin(Start::Person* player, int); 

然後,它將符合您的定義。您可以通過以下稱之爲:

Start::Person players[10] = {}; 
// Assume 's' is an object of type Start 
s.Begin(players, 10); 

這需要你傳遞一個索引來Person,然後元素的數量。你可以通過你的Begin聲明匹配您的定義使這個更好

void Begin(Start::Person players[4]); 

現在Begin將只接受4 Person數組,您可以通過以下調用:

Start::Person players[4] = {}; 
// Assume 's' is an object of type Start 
s.Begin(players); 

這會將數組的COPY傳遞到Begin。可以用下面的聲明/定義進一步改善這樣的:

template <size_t size> 
void Begin(const Person (&players)[size]); 

這將傳遞一個常量引用的Person任何尺寸的陣列;這是一個直接引用(所以沒有複印後),這是不可改變的,你可以用以下任何來電:

Start::Person oldPlayers[6] = {}; 
Start::Person newPlayers[15] = {}; 
Start::Person mvps[3] = {}; 
s.Begin(oldPlayers); 
s.Begin(newPlayers); 
s.Begin(mvps); 
+0

該陣列不會被複制 – deviantfan