Доступ к члену класса с атомарными закрытыми переменными в другом классе - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь получить доступ к частным переменным атома, определенным в class A, используя вектор объектов. Этот вектор объектов передается по значению в другом class B, определенном в другом заголовочном файле. При получении значения из вектора я получаю значение как 0

У меня есть несколько std::atomic частных переменных в классе, скажем, класс A

A.hpp file

class A
{ 
  public: 
  vector<A> updatePktCount();
  private:
  std::atomic pktCount;
  std::atomic recvPkt;
  std::atomic droppedPkt;

};

a.cpp

// для разных портов будут разные pkts вектор а [2]; // 2, так как у меня 2 идентификатора порта

vector<A> A::updatePktCount(int portId) 
{  a.push_back(A());
  //some function that gets packet details based on portId
  pktCount = getPacketCount(int portID, int recvPkt,int pktCount,int droppedPkt); 
  pktCount = pktCount++;
  recvPkt  = recvPkt++;
  droppedPkt = droppedPkt++; 

  a.push_back(A());

  return a; 
}

Класс B в другом заголовочном файле B.hpp

class B: public A {

   void getPacketCountFromA();
};

B.cpp file

void B::getPacketCountFromA()
{
   vector<A> storeValue; 
   A a; 
   storeValue = a.updatePktCount();
   for(auto i = storeValue.begin(); i != storeValue.end(); ++i)
   {
      // print values
   }
}

Я создал вектор объектов в A, например, vector<A> a[2] для 2 portId, но когда я извлекаю этот вектор в getPacketCountFromA, я получаю вектор размером 2, но все значения в векторе 0

Я что-то здесь не так делаю?

Результат

размер вектора 2 pktCount = 0 recvPkt = 0 dropPkt = 0

1 Ответ

0 голосов
/ 06 мая 2018

recvPkt = recvPkt++; извлекает значение recvPkt, приращение recvPkt, затем сохраняет полученное значение (0) обратно в recvPkt, теряя эффект приращения. Просто увеличьте значение:

++recvPkt;

То же самое для других переменных.

...