2017-04-04 8 views
0

안녕하세요 누구든지 도와 줄 수 있습니까? 개체 스택 (이 경우 포인트)의 맨 위 요소를 인쇄해야하고 온라인에서 솔루션을 찾을 수 없습니다. 나는 cout에서 pointStack.top()을 호출하는 최상위 또는 직선의 데이터 유형을 변경하려고 시도했지만 아무런 운이 없었습니다. 노트. 오류 C2679 문제 귀하의 설명에 따르면OOP C++를 사용하여 스택 항목을 인쇄 할 수 없습니다

#include <iostream> 
#include <stack> 

#include "point.h" 

using namespace std; 

int main(){ 
    stack<Point> pointStack; 

    Point p; 
    int i; 
    int counter = 0; 

    for (i = 0; i < 10; i++){ 
     p.pCreate(); 
     Point p1(p.getXPos(), p.getYPos()); 
     pointStack.push(p1); 
     counter++; 
    } 

    while (!pointStack.empty()){ 
     Point top = pointStack.top(); 
     cout << top; // error C2679 
     cout << pointStack.top(); // also error C2679 
    } 

    system("PAUSE"); 
    return 0; 
} 

#ifndef __Point__ 
#define __Point__ 

using namespace std; 

class Point{ 
private: 
int x, y; 
public: 
Point(); 
Point(int x, int y); 
int getYPos(){ return y; } 
int getXPos(){ return x; } 
void pCreate(); 
}; 
#endif 

Point::Point(){ 
x = 0, y = 0; 
} 

Point::Point(int a, int b){ 
x = a; 
y = b; 
} 
void Point::pCreate(){ 
x = -50 + rand() % 100; 
y = -50 + rand() % 100; 
} 
+1

[MCVE] (https://stackoverflow.com/help/mcve)를 제공하면 좋을 것입니다. 당신은 "point.h"를 보여주지 않았다. – javaLover

+0

[오류 C2679 : 바이너리 '<<': 연산자 없음] (http://stackoverflow.com/questions/22724064/error-c2679-binary-no-operator-found-which-takes-a-right-hand- operand-of)도 도움이 될 수 있습니다. – javaLover

+0

좋습니다. 아주 기본이지만 수행 할 것입니다. –

답변

2

이기 때문에 나는 팝업 기능을 포함하지 않은, 난 당신이 < < 연산자를 오버로드하는 것을 잊지 생각, 당신은 here을 확인, 당신을 위해 Point 클래스를 연산자 오버로드 기능을 추가해야합니다 . 예를 들어

:

class Point{ 
... 
public: 
    friend std::ostream& operator<< (std::ostream& stream, const Point& p) 
     {cout<<p.getx<<p.gety<<endl;} 
... 
}; 

플러스, 당신은이 무한 루프로 이어질 것입니다, 당신의 while 성명에서 pop에 스택의 요소를 잊는다.

+0

이 내가 찾던 알고 난 이제 웹에서 MS의 예를 볼, 감사합니다, "친구 ostream에 & 연산자 << (ostream에 & 스트림, CONST 포인트 & p);" "ostream에 & 연산자 << (ostream에 및 운영 체제, const를 추가 포인트 & P) { \t OS << 픽셀 << ","<< 평, \t 반환 OS, }는 " 가 큰 성공을 –

+0

@RowanBerry 내 기쁨 코드 : – Jiahao

0
cout<<top; 

포인트는 사용자가 만든 클래스이기 때문에 컴파일러에서는 인쇄 할 수 없습니다. 포인트의 개별 요소는 직접 인쇄해야합니다.

 cout<<point.getx<<point.gety<<endl; 

또는 비슷한 일이 위에서 언급 한 않는 클래스의 연산자 < <에 대한 과부하 함수를 작성

처럼.