我正在尝试动态地制作对象数组,但尝试后有时无法这样做。相关代码是下一个

整个代码太长了,无法全部粘贴到这里,所以我只发布相关部分。

这是国家。h

#ifndef State_h
#define State_h

#include "Arduino.h"


class State{
    private:
        char *idText;
    public:
        Estado(String _idText);
        Estado();
        void setID();
        int id;
};
#endif

这是State.cpp
#include "Arduino.h"
#include "Estado.h"

using namespace std;

Estado::Estado(String _idText){
    _idText.toCharArray(idText, _idText.length()+1);
    setID();
}

Estado::Estado(){}

void Estado::setID(){
    char* _id = strtok(idText,":");
    id = atoi(_id);
}


这是main.ino
Satate *states;

void setup(){
    int sizeParameters;
    sizeParameters = //I get the user's size from keyboard and convert to int
    char parametersChar;
    parametersChar = //I get the user's string from keyboard and convert to char
    estados = new Estado[sizeParameters];

    char* token = strtok(parametrosChar, "-");
    int i = 0;
    while(token != NULL){
        estados[i] = new Estado(token);// Here I get the error
        i++;
        token = strtok(NULL,"-");
    }

    Serial.println(estados[0].id);
}


我正在等待一系列对象

最佳答案

您可以使用以下命令定义一个Estado数组:

 estados = new Estado[sizeParameters];

这些条目中的每一个都有一种Estado

然后,您分配Estado*返回的new类型的内容:
 estados[i] = new Estado(token);

那行不通。您需要此:
 estados = new Estado*[sizeParameters];

那些是指针,或者您需要这样做:
 std::vector<Estado> estados;

然后逐步添加:
 estados.push_back(Estado(token));
push_back方法更好,因为您无需预先计划所需的大小数组,只需在找到要添加的新内容时添加即可。在实践中,这比预先要求用户状态要添加多少东西要麻烦得多。您可以弄清楚它们何时完成添加。

10-08 19:52