繁体   English   中英

具有指针数组的函数内部的C ++调用函数

[英]C++ call function from inside a function with pointer array

我有几个对象,有时我必须一个接一个地访问它们。 现在,我创建了一个“虚拟”对象,该对象带有指向所有对象的指针数组。 如果现在使用此对象调用函数,则将对其数组内的每个指针进行另一个调用。 我能够以此方式更改其他对象的值。 但是,仅从对象中获取值是不可能的,我总是从虚拟对象中获取值。 简单的例子:

// 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

更换:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM