2013-11-03 120 views
0

所以基本上我有一個點結構隊列存儲結構對象

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> 

回答

2

pointQueue是一個指針,你是治療喜歡的對象。由於人們似乎沒有理由爲它是一個指針,最簡單的解決方法是使用一個對象:

std::queue<Point> pointsQueue; 

如果你真的需要一個指針,那麼你需要通過->運營商來訪問它的成員:

pointQueue->push(p); 

或者,你可以去參考與*操作的指針。這使您可以向對象的引用它指出:

(*pointQueue).push(p); 

順便說一句,在typedef語法聲明的類型是不是在C++必要的,事實上,它看起來很奇怪。這是通常的做法:

struct Point 
{ 
    unsigned int x; 
    unsigned int y; 
}; 
+0

有可能會或可能不會是堆分配的理由。我們真的不知道沒有代碼。但是這兩種情況中的一種將會覆蓋它! –

+0

一個新的錯誤出現了:從轉換「的std ::隊列 *」非標量型「的std ::隊列」要求 – thirdage

+0

@thirdage你試圖用一個指針作爲對象的其他地方。 – juanchopanza

0

你有一個指向queue,而不是一個queue。使用->來訪問成員,或刪除間接。

0

你有一個指向變量的指針。因此,在使用隊列之前,你應該自己得到一個隊列。就像這樣:

(*pointQueue).push(p); 

或短,但一樣的:

pointQueue->push(p);