C++ 如何修复:错误:不匹配';运算符=';(操作数类型为';Estado';和';Estado*';)
我试图动态地创建一个对象数组,但在尝试之后,有时我做不到。下一个是相关代码 整个代码太长,无法全部粘贴到这里,所以我只发布相关部分 这是国家C++ 如何修复:错误:不匹配';运算符=';(操作数类型为';Estado';和';Estado*';),c++,arrays,pointers,arduino,C++,Arrays,Pointers,Arduino,我试图动态地创建一个对象数组,但在尝试之后,有时我做不到。下一个是相关代码 整个代码太长,无法全部粘贴到这里,所以我只发布相关部分 这是国家 #ifndef State_h #define State_h #include "Arduino.h" class State{ private: char *idText; public: Estado(String _idText); Estado(); voi
#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);
}
这是主要的
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 = new Estado*[sizeParameters];
std::vector<Estado> estados;
push_-back
方法更好,因为您不需要提前计划所需的阵列大小,您只需在发现要添加的新内容时添加即可。实际上,这比要求用户预先说明他们添加了多少内容要轻松得多。您可以在完成添加后找到答案。提示:尽量避免使用C样式数组和new[]
。而是使用和其他标准库容器。这使得内存管理变得非常简单,并且可以通过引用传递,其中包含关于大小的信息。无关:Estado
可能需要额外的支持函数来处理char*idText代码>有关详细信息,请参阅。`estados=std::vector;`无效。假定未定义复制构造函数或赋值运算符,且默认值为char*
,estados.emplace_back(Estado(令牌))代码>可能更好。