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