我正在尝试动态创建对象数组,但尝试后有时无法这样做。相关的代码是下一个
整个代码太长了,无法全部粘贴到这里,所以我只发布相关部分。
这是国家。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);
}
我正在等待一系列对象
答案 0 :(得分:1)
您可以这样定义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
方法更好,因为您不需要预先计划所需的大小数组,只需在找到要添加的新内容时添加即可。实际上,这比要求用户状态预先添加多少东西要麻烦得多。您可以弄清楚它们何时完成添加。