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(令牌))可能更好。