deque.push_front()给出错误“表达式必须具有类类型”

时间:2014-02-05 22:27:35

标签: c++ visual-c++ stl deque

我试图用指向用户定义的结构Tile的指针初始化一个双端队列,以消除不必要的复制。

我的代码如下所示:

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

以上代码位于main.cpp。

Tile结构看起来像这样,并包含在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:包括vector,deque,Tile struct

但是,当我尝试push_front(start)时,我在main.cpp中收到错误:表达式必须具有类类型。“我不确定我的#includes中是否存在可能的错误导致此错误,所以请如果是这种情况,请告诉我。否则,我不完全确定如何修复此错误。

提前致谢!

1 个答案:

答案 0 :(得分:4)

写作时

deque<Tile*> search();

您实际上并未声明名为deque<Tile*>的{​​{1}}并使用默认构造函数。相反,C ++将此解释为名为search的函数的函数声明,该函数不接受任何参数并返回search。您无法在函数上调用deque<Tile*>,因此会出错。

要解决此问题,请从变量声明中删除push_front,或者将其替换为()(如果您使用的是符合C ++ 11的编译器)。这将导致C ++(正确地)解释您想要声明变量。

希望这有帮助!