C ++ / Arduino数组的实现

时间:2014-08-16 21:39:37

标签: c++ arrays pointers arduino

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

示例:

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中编写。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您的类定义中的行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);
}

答案 1 :(得分:0)

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

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

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