【问题标题】:C++/Arduino Implementation of array数组的 C++/Arduino 实现
【发布时间】:2014-08-16 21:39:37
【问题描述】:

我在使用指针数组时遇到问题,需要创建一个指针数组来引用另一个类中每个对象的整数值。

示例:

arrayOfPointers[0] = object.int;

如果这个数组在一个类中并且它只是一个引用它将是静态的,所以我可以使用这个数组来引用另一个类的每个对象的值,这将被记录在未来的 eeprom 中,当我读取 eeprom 中的值时,我可以使用指针将 eeprom 的值传递给对象变量。

我当前的代码是:

class Scenario {

public:
int byte; // byte of the eeprom
static int* link[6]; // array of pointers



Scenario(int byteI) // constructor of the class
{ 

byte = byteI;
link[0] = &led1.fade;
}

在这种情况下,我收到错误:未定义对 `Scenario :: link 的引用。我试过使用

Scenario::Scenario link [0] = &led1.fade;

但是当我尝试以任何方式使用它时,无论是在串行打印中,还是尝试在 eeprom 中写入时,我都遇到了错误。这样做的正确方法是什么?

【问题讨论】:

    标签: c++ arrays pointers arduino


    【解决方案1】:

    类定义中的static int* link[6]; // array of pointers 行只是一个声明,因为它是静态的。您需要在源文件(不是标题)中的类之外添加一个定义int* Scenario::link[6];

    类似这样的:

    struct led
    {
        int fade;
    };
    
    led led1;
    
    // put this in a header file Scenario.h
    class Scenario
    {
    
    public:
        int byte; // byte of the eeprom
        static int* link[6]; // array of pointers (DECLARATION)
    
        Scenario(int byteI) // constructor of the class
        {
    
            byte = byteI;
            link[0] = &led1.fade;
        }
    };
    
    // put this in a source file Scenario.cpp
    int* Scenario::link[6]; // (DEFINITION)
    
    // make sure you link Scenario.o along with your main object file
    int main()
    {
        Scenario s(4);
    }
    

    【讨论】:

      【解决方案2】:

      静态成员变量总是需要在代码文件中定义。

      在类定义后的代码文件中插入Scenario::link初始化:

      int* Scenario::link[6] = {NULL};
      

      【讨论】:

        猜你喜欢
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多