所以我有一个动态制作的队列,我试图重载>>操作员。但我输入的数字是错误的。我猜错了什么? (<<运算符可以正常工作)。 所以我的课程是:
class queue
{
int queue1[100];
int rear1,front1, num1;
public:
queue(): rear1(-1),front1(-1){};
queue(int , int , int);
void insert1(int );
void delet1();
friend istream& operator>>(istream& in, queue& obj);
friend ostream& operator<<(ostream& out, const queue& obj);
void queue::printOn(ostream &out) const;
};
和函数运算符本身:
istream& operator>>(istream& in, queue& obj){
in >> obj.queue1[obj.rear1++];
cout <<"inserted: " << obj.queue1[obj.rear1];
return(in);
}
我的主要功能是:
queue qu1;
cout<<"Entered number:";
cin>>qu1;
cout << qu1;
这是程序的工作方式:
输入的数字:5
但
已插入:-858993460
已插入:-858993460
答案 0 :(得分:0)
未定义的行为:
in >> obj.queue1[obj.rear1++];
cout <<"inserted: " << obj.queue1[obj.rear1]; << rear1 is 1 more than above
答案 1 :(得分:0)
obj.rear1++
将返回当前的real1
,
所以在第一时间使用
in >> obj.queue1[obj.rear1++];
变为in >> obj.queue1[-1];
这是未定义的行为。
cout <<"inserted: " << obj.queue1[obj.rear1];
变为cout <<"inserted: " << obj.queue1[0];
这是从未初始化的内存中读取的,也是未定义的行为。
将obj.rear1++
更改为++obj.rear1
可以解决这两个问题。