Вызов функции C ++ внутри функции с массивом указателей - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть пара объектов, и иногда мне приходится получать доступ ко всем из них один за другим. Теперь я создал «виртуальный» объект с массивом указателей на все мои объекты. Если я сейчас вызываю функцию с этим объектом, я делаю еще один вызов с каждым указателем внутри его массива. Я смог изменить значения других объектов таким образом. Однако просто получить значение из объекта было невозможно, я всегда получал значение из виртуального объекта. Простой пример:

// arrayVerify.ino

#include "ledFunction.h"

ledFunction T1(1);                                      // create first object

ledFunction T2(2);                                      // create second object

ledFunction objectPointers[] = { &T1, &T2 };        // create array with pointers to objects

ledFunction Multi(objectPointers);                  // create a virtual object to access all

void setup()
{
    Serial.begin(115200);

    Multi.example();
}

void loop(){}

// ledFunction.h

#ifndef _LEDFUNCTION_h
#define _LEDFUNCTION_h

#include "arduino.h"

class ledFunction
{
private:

    ledFunction *multiStripe;       // the array used after creating the virtual object

    byte identifier;

public:

    ledFunction(int ident);                         // create single object

    ledFunction(ledFunction *objectPointers);       // create virtual object

    void printIdentifier();

    void example();

};

#endif

// ledFunction.cpp

#include "ledFunction.h"

ledFunction::ledFunction(int ident)
{
    identifier = ident;
}

ledFunction::ledFunction(ledFunction *objectPointers)
{
    multiStripe = objectPointers;

    identifier = 9;
}

void ledFunction::example()
{
    multiStripe[0].printIdentifier();
    multiStripe[1].printIdentifier();
}

void ledFunction::printIdentifier()
{
    Serial.print("Identifier is: ");
    Serial.println(identifier);
}

Вывод здесь должен быть 1 2 и это 9 9

1 Ответ

0 голосов
/ 04 ноября 2018

Заменить:

ledFunction objectPointers[] = { &T1, &T2 };

по:

ledFunction* objectPointers[] = { &T1, &T2 };

и соответствующие заявления:

   ledFunction **multiStripe;       // the array used after ...
   ledFunction(ledFunction **objectPointers );       // create virtual object
   multiStripe[0]->printIdentifier();
   multiStripe[1]->printIdentifier();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...