Как исправить: ошибка: нет соответствия для оператора = (типы операндов: Estado и Estado *) - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь создать массив объектов динамически, но после попытки иногда не могу.Соответствующий код следующий

Весь код слишком длинный, чтобы вставить все это здесь, поэтому я просто опубликую соответствующие части.

Это State.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 Ответ

1 голос
/ 11 апреля 2019

Вы определяете массив 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 лучше, потому что вам не нужно заранее планировать, какой размер массива вам нужен, вы можете просто добавлять его по мере того, как вы находите новые вещи для добавления.На практике это намного менее раздражает, чем требовать от пользователя заранее указать, сколько вещей они добавляют.Вы можете понять это, когда они закончат добавлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...