无法使用OOP C ++打印堆栈项

时间:2017-04-04 03:17:38

标签: c++ oop stack iostream cout

你们可以帮忙吗?我需要打印一堆对象的顶部元素(在这种情况下是点),我无法在线找到解决方案。我已经尝试在cout中更改顶部或直接调用pointStack.top()的数据类型,但我没有运气。注意。我没有包含Pop函数,因为错误C2679是问题

#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;
}

2 个答案:

答案 0 :(得分:2)

根据你的描述,我认为你忘了重载&lt;&lt;运算符,您应该为Point类添加运算符重载函数,检查here

例如:

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

另外,你在pop语句中忘记了while堆栈中的元素,这将导致无限循环。

答案 1 :(得分:0)

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

不起作用,因为point是由您创建的类,编译器无法打印它。 您应该自己打印单个元素。 喜欢

{{1}}

或者为运营商&lt;&lt;创建一个重载函数在你的班级里做了类似的事情。