0

我对cpp很陌生。我在以下代码中遇到问题。
我希望当我从 main 一次又一次地调用 checkyo() 时, id 的值应该会增加。但是,它保持不变。

**如果输入

检查是 = 1

检查是 = 1

检查是 = 1

检查是 = 1

检查是 = 1

按任意键继续 。. .**

但是,我希望输出是

**如果输入

检查是 = 1

检查是 = 2

检查是 = 3

检查是 = 4

检查是 = 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;
  }
4

3 回答 3

2

因为在 checkyo() 函数中,您只需 push_back 一次,然后将 count1 更改为 2,因此在 check() 函数中v始终有一个元素输出1

A temp = v.back();
temp.check();

temp 始终是最后一个元素 in 的副本v,它不是对 v 的最后一个元素的引用。

您可以引用最后一个元素,v其中应该为您提供所需的操作:

A &temp = v.back();
temp.check();
于 2013-01-24T07:12:19.870 回答
2

在调用之前check(),创建一个临时对象

A temp = v.back();
temp.check();

这个id临时对象的 增加了,但idvector的对象中的 s 没有增加。

当您checkyo()再次调用时,会有一个A带有idof的新临时文件0。如果要增加向量中的最后一个对象,则必须使用对该对象的引用

A &last = v.back();
last.check();

现在最后一个对象不再被复制,每次调用时它id都会增加, 。1checkyo()

于 2013-01-24T07:12:44.167 回答
1

更改A tempA& temp。您正在复制它,而不是对向量中的那个进行操作。

于 2013-01-24T07:12:09.220 回答