我试图用指向用户定义的结构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中是否存在可能的错误导致此错误,所以请如果是这种情况,请告诉我。否则,我不完全确定如何修复此错误。
提前致谢!
答案 0 :(得分:4)
写作时
deque<Tile*> search();
您实际上并未声明名为deque<Tile*>
的{{1}}并使用默认构造函数。相反,C ++将此解释为名为search
的函数的函数声明,该函数不接受任何参数并返回search
。您无法在函数上调用deque<Tile*>
,因此会出错。
要解决此问题,请从变量声明中删除push_front
,或者将其替换为()
(如果您使用的是符合C ++ 11的编译器)。这将导致C ++(正确地)解释您想要声明变量。
希望这有帮助!