2014-02-14 118 views
0

我的代碼有問題。 我有一個所謂的播放器類,它看起來像這樣構造函數中的C++錯誤

class Player 
{ 
public: 
    ... 
Player(); 
Player(string firstName, string lastName, int birthYear); 
~Player(); 
    ... 
}; 

我source.cpp看起來像這樣

string firstName = ...; 
string lastName = ...; 
int birth = ... 

Player team[x](firstName, lastName, birth); // <--- This is were I get my errors 

我的錯誤是說

error C3074: an array can only be initialized with an initializer-list 

error C2466: cannot allocate an array of constant size 0 

error C2057: expected constant expression 

我想構造使用是Player(string firstName, string lastName, int birthYear)。我想,我可能會使用默認的構造函數source.cpp

我要創建5倍Player團隊[X](名字,姓氏,出生)

但是,這是我得到我的錯誤。有什麼建議麼?

+0

請在這裏發表您的代碼。哪些錯誤令你感到困惑? –

+0

我試過。但是,當我在此頁面上使用代碼功能,然後複製我的代碼時,它只會將代碼片段放在1行左右。我不喜歡複製我所有的線條。有沒有更好的方法將代碼複製到此頁面? – Snigelmat

+0

@ user3194111選擇代碼,複製到這裏,粘貼,調整縮進。查看有關格式化信息的幫助選項。 – crashmstr

回答

2

這一行根本是無效的:

Player team[x](firstName, lastName, birth); // <--- This is were I get my errors 

它沒有意義。你正試圖聲明一個數組並同時調用一個構造函數。您已經創建了您的team陣列。如果你想創建一個Player並分配它,那麼你可以使用:

team[x] = Player(firstName, lastName, birth); 

當然,你已經創造了一堆他們(缺省初始化)當您創建擺在首位的陣列。由於這是C++,請使用std::vector<Player>


此外,東西是錯誤的,但不產生錯誤:

int matches; 
int* dates = new int[matches]; 

這裏,matches是未初始化的並且它的值是不確定的。讀取該變量會調用未定義的行爲,當然,您不希望數組的任何大小(爲什麼不再使用向量?)在使用它之前,您需要初始化matches

+0

謝謝。我從來沒有使用過載體,這就是爲什麼。我會谷歌周圍並尋找它。謝謝 – Snigelmat

0

您的代碼有一個問題,變量matches尚未初始化並且具有不確定的值。

int matches; 
int* dates = new int[matches]; 

你應該調用new int[matches]前初始化matches。當你分配的Players陣列

一個nrOfPlayersteam玩家構造:

Player* team = new Player[nrOfPlayers]; 

您可以在一個球員的信息通過創建臨時Player對象和team其分配給一個元素現在填寫。這將調用Player的隱含定義拷貝賦值運算符

替換線與75:

team[x] = Player(firstName, lastName, birth); // copy constructor is called 
+0

「發生這種情況是因爲您試圖分配一個整數數組與變量匹配尚未定義。」 - 這不是真的。 'matches'未初始化並且具有不確定的值,並且讀取它是UB,但這不是編譯器錯誤。大小錯誤來自這一行 - Player team [x](firstName,lastName,birth);' –

+0

@EdS。感謝您指出了這一點。我修改了我的參賽作品以反映您的更正。 – Anachronous

+0

好的。玩家構造函數現在可以工作。現在的問題是 - 如你所說 - int日期[matches]。我的想法是把int * dates = new int [matches]放在sas >> matches下;但是,這並不奏效。我有一些鏈接錯誤 – Snigelmat