Указатели в Arduino

iLoveJava
Offline
Зарегистрирован: 04.09.2015

Доброе время суток.

Пользуюсь Arduino впервые, в ней легко разобраться, если с плюсами знаком, и все вроде ок,  но возникла проблема на ровном месте, а именно, не работает  оператор присвоения для указателей ) точнее работает, но нельзя указать другой адрес готовому указателю

class MyClass {};

MyClass*  pointer1;

MyClass* pointer2 = new MyClass;

pointer1 = pointer2; // вот тут беда ))) "does not name a type"

но, при этом такое  работает:

MyClass* pointer = pointer2; // работает

как так ? банально не может присвоить указателю другой адрес ?

еще не работает:   pointer1 = null;

Тут скорее всего, что-то банальное или недосмотренное, но все равно прошу помощи. Спасибо

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Выложите скетч, только вставляйте его правильно, с номерами строк, покажите сообщение, выдаваемые об ошибке.
Иначе можно сказать только, что ошибка в 3987 строке.
И ещё, правильно писать new MyClass();, а не new MyClass;

Piskunov
Offline
Зарегистрирован: 13.02.2014

Похоже мы наступали на одни грабли ))

char *ptr1;
char *ptr2 = NULL;
void setup() {
          Serial.begin (9600);
}
void loop() {
          ptr1 = new char ('A');
          ptr2 = ptr1;
          Serial.println (*ptr2);
          Serial.println (sizeof(ptr2));
          Serial.println (sizeof(*ptr2));
          delete ptr2;
          ptr2 = NULL;
          delete ptr1;
          ptr1 = NULL;
          delay (1000);
}

Вот это работает. А до классов я ещё не добрался.

Logik
Offline
Зарегистрирован: 05.08.2014

Впиндюрил Ваш код в проект.



void loop()
{
  
  MyClass*  pointer1;

MyClass* pointer2 = new MyClass;



pointer1 = pointer2; // вот тут беда ))) "does not name a type"

 

Собирается все. IDE 1.0.6. Вобще с указателями никаких внеплановых траблов в ардуине не замечал. GCC без замечаний ;)

Piskunov
Offline
Зарегистрирован: 13.02.2014

ХЗ. Вот так работает:

class MyClass {
     public:
          MyClass (int _Test):
          Test (_Test)
          {};
          int Get () const {
               return Test;
          };
          void Set (int _Test){
               Test = _Test;
               return;
          };
     private:
          int Test;
};
MyClass *ptr1;
MyClass *ptr2 = NULL;
void setup() {
          Serial.begin (9600);
}
void loop() {
          ptr1 = new MyClass (43);
          ptr2 = ptr1;
          Serial.println (ptr2->Get());
          Serial.println (sizeof(ptr2));
          Serial.println (sizeof(*ptr2));
          delete ptr2;
          ptr2 = NULL;
          delete ptr1;
          ptr1 = NULL;
          delay (1000);
}

 

iLoveJava
Offline
Зарегистрирован: 04.09.2015

Мда, что-то ночью я жестко подтупил, сейчас аж стыдно  )

kisoft пишет:
И ещё, правильно писать new MyClass();, а не new MyClass;
  согласен, в Джаве это вызвало бы ошибку, в плюсах нет, но все равно Вы правы.

бес попутал написать null, вместо NULL )

Ошибка заключалась в том, что я пытался присвоить  указателю другой адрес вне функций , а глобально - это уже ночной бред ))

Вот такое оно - перое знакомство. Всем спасибо за помощь.