2017-04-04 82 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

[error C2679:binary'<<':no operator found](http://stackoverflow.com/questions/22724064/error-c2679-binary-no-operator-found-which-takes-a-right-hand- operand-of)可能有幫助 – javaLover

+0

確定它是非常基本的,但會做 –

回答

2

根據你的描述,我想你忘記重載< <運營商,你應該添加一個運算符重載函數爲你Point類,檢查here

例如:

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

另外,你忘了pop從堆棧的元素在你的while聲明,這將導致無限循環。

+0

謝謝你,我現在認爲在網絡上的MS的例子,我知道我一直在尋找,加入 「朋友的ostream&運算符<<(ostream的和流,const的點& p);」 「的ostream&運算符<<(ostream的和OS,常量點&p) { \t OS << PX << 「」 << PY; \t回報OS; }」 要獲得巨大成功 –

+0

@RowanBerry我的榮幸代碼:) – Jiahao

0
cout<<top; 

不起作用,因爲point是您創建的類,編譯器無法打印它。 您應該自己打印點的單個元素。 像

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

或創建操作< <在你的類,它沒有類似的事情上面提到過載功能。