Помогите с кодом, плиз

Тема в разделе "Флудилка", создана пользователем Deps, 6 фев 2015.

  1. Deps

    Deps Нуб

    Всем привет!

    Сразу прошу не ругать, я новичок.
    Можете подсказать, в чём у меня "грабли"? Приведённый ниже код вылетает (либо печатает что-то совсем левое на второй строке в loop().
    Код (Text):
    class B {
    public:
      virtual const char* getStr();
      virtual int getInt();
      B(const char*, int);
    private:
      const char* p_str;
      int m_int;
    };

    B::B(const char* str, int i){
      p_str=str;
      m_int=i;
    }

    const char* B::getStr() {
      return p_str;
    }

    int B::getInt(){
      return m_int;
    }

    B* items[]={&B("test", 1)};

    void setup(){
      Serial.begin(9600);
      Serial.println("SETUP");
    }

    void loop() {
      Serial.println("LOOP");
    /// Здесь лажа /////////////////////
      Serial.println(items[0]->getInt());
    ////////////////////////////////////
      delay(100000);
    }
    Я понимаю, что что-то не так с указателями, но вот сижу целый вечер и не могу понять - что.
    Помогите, плиз.
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    вычисления внутри Serial.println() разве возможны?
    Ну или вместо "a->b" попрбуй "a.b"
     
  3. Deps

    Deps Нуб

    Похоже, нашёл проблему.
    Экземпляр класса, который создаётся в строке
    Код (Text):
    B* items[]={&B("test", 1)};
    имеет ограниченный scope, поэтому ссылка на него берётся, сохраняется в массиве, а сам объект уничтожается...
    В IDE 1.5.8 этот код вообще не компилируется.