如何解决:错误:“ operator =”不匹配(操作数类型为“ Estado”和“ Estado *”)

时间:2019-04-10 22:36:40

标签: c++ arrays pointers arduino

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

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

这是国家。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);
}

我正在等待一系列对象

1 个答案:

答案 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方法更好,因为您不需要预先计划所需的大小数组,只需在找到要添加的新内容时添加即可。实际上,这比要求用户状态预先添加多少东西要麻烦得多。您可以弄清楚它们何时完成添加。