cpp программа зависает при доступе к переменной члена класса - PullRequest
0 голосов
/ 30 июня 2018

При использовании Teensy 3.2 моя программа висит в разделе, указанном ниже. Я не знаю, как получить доступ к glyph. Я могу видеть все строки, напечатанные на моем последовательном мониторе Arduino, если закомментирую строку //hangs here.

#include <vector>
#include <Arduino.h>

class Letter {
    public:
        String glyph = "a";
};

class Language {
    public:
        Language();
        std::vector <Letter> alphabet;
};

Language::Language(){
    std::vector <Letter> alphabet;
    Letter symbol = Letter();
    alphabet.push_back(symbol);
    delay(2000);
    Serial.println("hello world");//prints in the arduino monitor
    Serial.println(this->alphabet[0].glyph);//hangs here
    Serial.println("line of interest executed");//runs only if line above is commented out
}

void setup() {
    Serial.begin(9600);
    Language english = Language();
}

void loop() {

}      

1 Ответ

0 голосов
/ 30 июня 2018

Вы определяете локальную переменную alphabet и push_back один элемент в ней. Это не имеет ничего общего с переменной-членом alphabet. Затем this->alphabet[0].glyph приводит к UB, переменная-член alphabet все еще пуста.

Возможно, вы захотите

Language::Language() {

    Letter symbol = Letter();
    this->alphabet.push_back(symbol);
    // or just alphabet.push_back(symbol); 

    delay(2000);
    Serial.println("hello world");//prints in the arduino monitor
    Serial.println(this->alphabet[0].glyph);
    Serial.println("line of interest executed");
}
...