【问题标题】:deque.push_front() giving error "expression must have class type"deque.push_front() 给出错误“表达式必须具有类类型”
【发布时间】:2014-02-05 22:27:35
【问题描述】:

我正在尝试使用指向用户定义结构 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 中的可能错误是否导致了此错误,所以请如果是这种情况,请告诉我。否则,我不完全确定如何解决此错误。

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    当你写作时

    deque<Tile*> search();
    

    您实际上并没有声明一个名为 searchdeque&lt;Tile*&gt; 并使用默认构造函数。相反,C++ 将此解释为名为 search 的函数的函数声明,该函数不接受参数并返回 deque&lt;Tile*&gt;。您不能在函数上调用 push_front,因此会出现错误。

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

    希望这会有所帮助!

    【讨论】:

    • 非常感谢您的快速回复!我的#includes 是否有意义,或者你会改变什么?我最近开始不得不制作自己的 .h 文件,所以我不完全确定我这样做是否有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多