2014-02-15 52 views
0

不能看到我做錯了什麼......類的初始化沒有匹配的構造

我GameWindow.h有碼 -

#include <iostream> 
#include <string> 

using namespace::std; 
class GameWindow{ 
    string WindowType; 
    string WindowName; 
    int TopLeftX,TopLeftY; 
    int Height,Width; 
    bool GetBoxed; 
public: 
    GameWindow(string WinType, string WinName,int TLX,int TLY,int y,int x,bool box); 
    void SetHeight(int y); 
    void SetWidth(int x); 
    void SetTopLeftY(int TLY); 
    void SetTopLeftX(int TLY); 
}; 

和源文件代碼的存在 -

#include "GameWindow.h" 

GameWindow::GameWindow(string WinType, string WinName,int TLX,int TLY,int y,int x,bool box){ 
    WindowType = WinType; WindowName = WinName; 
    TopLeftX = TLX; TopLeftY = TLY; 
    Height = y; Width = x; 
    GetBoxed = box; 
}; 

void GameWindow::SetHeight(int y){Height = y;} 
void GameWindow::SetWidth(int x){Width = x;} 
void GameWindow::SetTopLeftY(int TLY){TopLeftY=TLY;} 
void GameWindow::SetTopLeftX(int TLX){TopLeftX=TLX;} 

然後在另一個源文件中,我嘗試創建一個GameSpace矢量,並在每次向矢量添加一個時調用構造函數 -

int OffsetX =5; 

    vector<GameWindow>GameSpace; 

    GameSpace.resize(8); 
    GameSpace[0] = GameWindow("MonstersLeftWin", "Misc", 
    (getmaxx(stdscr)-22-OffsetX), 2, 1, 22, true); 

我得到「沒有匹配的構造函數初始化GameWindow」的錯誤。無法看到我做錯了什麼!

我也得到了錯誤,如果我有 -

GameSpace[0] = *new GameWindow("MonstersLeftWin", "Misc", 
    (getmaxx(stdscr)-22-OffsetX), 2, 1, 22, true); 

仍然不確定,如果我需要的「新」有或沒有。

感謝您的幫助。

+1

'在頭文件中使用namespace'是一個壞主意,而'*新的Foo()'順便說一句太,當然你也應該使用成員初始化列表,而不是在構造函數 – Paranaix

回答

2

這裏的問題是GameSpace.resize(8)聲明。只要你提供了一個自定義的構造函數,編譯器就不會再爲你生成一個默認的構造函數。但是,std::vector將默認初始化調整大小調用中的元素。

要麼提供一個默認的構造函數(首選):GameWindow()

或者使用void resize (size_type n, const value_type& val);超載

+0

中分配每個變量值!謝謝 – JabbaWook

1

在這份聲明中

GameSpace.resize(8); 

編譯器試圖調用類GameWindow的默認構造函數。然而這個類沒有默認的構造函數。所以編譯器發出錯誤。

而不是

GameSpace.resize(8); 

例如,你可以寫的東西作爲

GameSpace.resize(8, { "", "", 0, 0, 0, 0, false } ); 
相關問題