2014-02-05 82 views
0

我想用指向用戶定義的結構體,Tile的指針來初始化雙端隊列,以消除不必要的複製。deque.push_front()給出錯誤「表達式必須具有類類型」

我的代碼如下所示:

Tile *start = new Tile(0,0,0, 'q', nullptr); 
deque<Tile*> search(); 
search.push_front(start); 

上面的代碼位於main.cpp中。

磁磚結構是這樣的,幷包含在hunt.h:

struct Tile 
{ 
    int row; int col; int farm; 
    char tile; 
    Tile * added_me; 

    Tile(int f, int r, int c, char t, Tile * a) : 
     farm(f), row(r), col(c), tile(t), added_me(a){} 
}; 

我的程序的佈局如下:

的main.cpp:包括文件 「io.h」

io.h:包括 「hunt.h」,各種標準庫

hunt.h:包括載體,雙端隊列,瓷磚結構

但是,當我嘗試push_front(start)時,我在main.cpp中發生錯誤:表達式必須具有類類型。「我不確定在我的#includes中是否存在可能的錯誤導致此錯誤,所以請讓我知道如果是這樣的話。否則,我不完全知道如何解決這個錯誤。

在此先感謝!

回答

4

當你寫

deque<Tile*> search(); 

你實際上並沒有聲明deque<Tile*>名爲search並使用默認的構造函數。相反,C++將其解釋爲函數聲明,其名稱爲search,該函數不帶參數並返回deque<Tile*>。你不能在函數上調用push_front,所以錯誤。

要解決此問題,請從變量的聲明中刪除(),或將其替換爲{}(如果您使用的是C++ 11兼容的編譯器)。這將導致C++(正確)解釋你想聲明一個變量。

希望這有助於!

+0

感謝您的快速回復!我的#包括是否有意義,或者有什麼你會改變的?我最近開始不得不製作我自己的.h文件,所以我不完全確定我是否以一種合理的方式進行操作 –

相關問題