C ++ объект не сохраняет значения переменных - PullRequest
0 голосов
/ 18 марта 2020

Я начинающий программист C ++ и в настоящее время пытаюсь изменить существующий проект C ++, чтобы сделать его более гибким. Должна быть установлена ​​связь от малиновой шляпы с датчиками:

Связь. cpp

 vector<PortMax> ports;
 void Communication::Communication_setup() {
    // Create hardware setup
    hardware = HardwareRaspberry();
    hardware.begin();

    // Create drivers
    Max *pDriver01 = new Max(DRIVER01, &hardware);
    Max *pDriver23 = new Max(DRIVER23, &hardware);
    // Create ports
    ports.push_back(PortMax(pDriver01, PORT0PORT));
    ports.push_back(PortMax(pDriver01, PORT1PORT));
    // Start communication
    for(auto nr: ports) {
        nr.begin();
    }

uint8_t Communication::getSequence(int port_nr) {
     uint8_t retVal = ports.at(port_nr).getSequencePort();
}

PortMax. cpp

void PortMax::begin() {
     uint8_t pData[3];
     readDirectParameterPage(0x03, pData);
     mSequenceType_ = uint8_t((pData[0] >> 1) & 0x07);
     cout << "MSequenceType: " << mSequenceType_ << endl;
}
uint8_t PortMax::getSequencePort() {
     return mSequenceType_;
}

PortMax.h

class PortMax {
     uint8_t mSequenceType_ = 0;
     void begin();
     uint8_t getSequencePort();
}

У меня проблема в том, что моя переменная (в данном случае mSequenceType_) правильно сохраняется под именем, когда соединение установлено, а также показывает правильное значение в cout. Но как только я выпрыгиваю из функции begin () и хочу получить mSequenceType_ из port0 с помощью getSequence (), возвращается только начальное значение. По этой причине я думаю, что моя переменная назначается только локально, а не для всего моего объекта. Вы видите, что не так с моим кодом?

1 Ответ

4 голосов
/ 18 марта 2020

Этот код:

for(auto nr: ports) {
    nr.begin();
}

делает копию каждой записи в ports. nr - это переменная PortMax, а не ссылка на PortMax в векторе.

Добавьте &, чтобы сделать ее ссылкой. Теперь вы вызываете begin для объектов PortMax в векторе.

//      v
for(auto& nr: ports) {
    nr.begin();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...