2013-11-03 3 views
0

그래서 기본적으로 내가 대기열

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

가 지금은 포인트를 저장하는 큐를 만들고 싶어 점 구조체를 객체. 내가 대기열에 지점을 밀어하려고 할 때 그러나

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

이제, 다음과 같은 오류가

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

후 나는에 밀어 넣습니다

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

는 기본적으로 점 P를 생성하고 표시 큐

pointQueue.push(p); 

이고 include 파일로 가지고 있습니다 :

#include <queue> 

답변

2

pointQueue은 포인터이며, 당신은 객체처럼 취급합니다. 당신은 정말 당신이 -> 연산자를 통해 멤버에 접근 할 필요가 포인터가 필요한 경우

std::queue<Point> pointsQueue; 

: 그것은 포인터 할 이유가 없을 것 같다 때문에, 가장 간단한 해결책은 객체를 사용하는 것입니다 :

pointQueue->push(p); 

또는, * 연산자 포인터를 참조를 해제 할 수 있습니다. 이것은 당신에게 그것이 가리키는 객체에 대한 참조를 제공합니다 여담으로

(*pointQueue).push(p); 

를, 유형을 선언하는 typedef 구문은 꽤 이상한 보이는 사실, C++에서 필요하지 않습니다. 당신은 queue 아닌 queue에 대한 포인터를 가지고

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

는 또는 힙 할당에 대한 이유가있을 수도 있고 없을 수도 있습니다. 우리는 코드가 없으면 실제로 알지 못합니다. 그러나 그 두 가지 경우 중 하나가 그것을 충당 할 것입니다! –

+0

새로운 오류가 발생했습니다 : 'std :: queue *'에서 'scalp type'std :: queue '으로 변환이 – thirdage

+0

@thirdage로 지정되어 있습니다. 포인터를 객체의 다른 곳으로 사용하려고합니다. – juanchopanza

0

: 이것은 일반적인 방법입니다. ->을 사용하여 멤버에 액세스하거나 간접 참조를 제거하십시오.

0

변수에 대한 포인터가 있습니다. 따라서 큐를 사용하기 전에 큐 자체를 가져와야합니다.

(*pointQueue).push(p); 

이하,하지만 같은 :이처럼

pointQueue->push(p);