2014-02-05 83 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文件,所以我不完全确定我是否以一种合理的方式进行操作 –

相关问题