我对cpp很新。我在以下代码中遇到问题 我希望当我一次又一次地从main调用checkyo()时,id的值应该增加。但它仍然是一样的。
**输入
check is = 1
check is = 1
check is = 1
check is = 1
check is = 1
按任意键继续。 。 **
但是,我希望输出
**输入
check is = 1
check is = 2
check is = 3
check is = 4
check is = 5
请指出我的错误?
#include<iostream>
#include<vector>
int count1;
using namespace std;
class A{
int id;
public:
A(){
id=0;
}
void check()
{
++id;
cout<<"check is = " << id << endl;
}
};
class B{
vector<A> v;
public:
void checkyo()
{
if(count1==1)
{
cout<< "Entered if \n" ;
A a;
v.push_back(a);
}
A temp = v.back();
temp.check();
}
};
int main()
{
B b;
count1 =1;
b.checkyo();
count1++;
b.checkyo();
b.checkyo();
b.checkyo();
b.checkyo();
system("pause");
return 0;
}
答案 0 :(得分:2)
因为在checkyo()函数中,你只需要push_back一次,然后count1变为2,所以v
总是有一个元素在check()函数中输出1
。
A temp = v.back();
temp.check();
temp始终是v
中最后一个元素的副本,它不是对v的最后一个元素的引用。
您可以引用v
的最后一个元素,它可以为您提供所需的操作:
A &temp = v.back();
temp.check();
答案 1 :(得分:2)
在致电check()
之前,您需要创建一个临时对象
A temp = v.back();
temp.check();
此临时对象的id
会增加,但不会增加id
个对象中的vector
。
当您再次致电checkyo()
时,会有A
id
0
的新临时A &last = v.back();
last.check();
。
如果要增加向量中的最后一个对象,则必须使用对该对象的引用
id
现在,不再复制最后一个对象,每次拨打1
时,checkyo()
都会{{1}}递增。
答案 2 :(得分:1)
将A temp
更改为A& temp
。您正在复制它,而不是对矢量中的那个进行操作。