1

所以基本上我有一个点结构

typedef struct point {
unsigned int x;
unsigned int y;
} Point;

现在我想为存储点做一个队列。

queue<Point> *pointsQueue = new queue<Point>; // shouldn't be changed

但是现在当我尝试将一个点推入队列时,会出现以下错误

error:request for member 'push' in 'pointQueue', which is of non-class type 'std::queue<Point>*'

基本上是在创建一个点 p

Point p;
p.x = 3;
p.y = 4;

然后我将它推入队列

pointQueue.push(p);

我有一个包含文件:

#include <queue>
4

3 回答 3

2

pointQueue是一个指针,你就像一个对象一样对待。由于似乎没有理由让它成为一个指针,最简单的解决方案是使用一个对象:

std::queue<Point> pointsQueue;

如果你真的需要一个指针,那么你需要通过->操作符访问它的成员:

pointQueue->push(p);

或者,您可以使用运算符取消引用指针*。这为您提供了对它指向的对象的引用:

(*pointQueue).push(p);

顺便说一句,在 C++ 中声明类型的typedef语法不是必需的,实际上它看起来很奇怪。这是通常的方法:

struct Point 
{
  unsigned int x;
  unsigned int y;
};
于 2013-11-03T08:17:47.060 回答
0

你有一个指向 a 的指针queue,而不是 a queue。要么用于->访问成员,要么删除间接。

于 2013-11-03T08:19:12.243 回答
0

你有一个指向变量的指针。因此,在使用队列之前,您应该获得一个队列本身。像这样:

(*pointQueue).push(p);

或更短,但相同:

pointQueue->push(p);
于 2013-11-03T08:19:24.980 回答