Указатели в Arduino
- Войдите на сайт для отправки комментариев
Пт, 04/09/2015 - 03:12
Доброе время суток.
Пользуюсь Arduino впервые, в ней легко разобраться, если с плюсами знаком, и все вроде ок, но возникла проблема на ровном месте, а именно, не работает оператор присвоения для указателей ) точнее работает, но нельзя указать другой адрес готовому указателю
class MyClass {};
MyClass* pointer1;
MyClass* pointer2 = new MyClass;
pointer1 = pointer2; // вот тут беда ))) "does not name a type"
но, при этом такое работает:
MyClass* pointer = pointer2; // работает
как так ? банально не может присвоить указателю другой адрес ?
еще не работает: pointer1 = null;
Тут скорее всего, что-то банальное или недосмотренное, но все равно прошу помощи. Спасибо
Выложите скетч, только вставляйте его правильно, с номерами строк, покажите сообщение, выдаваемые об ошибке.
Иначе можно сказать только, что ошибка в 3987 строке.
И ещё, правильно писать new MyClass();, а не new MyClass;
Похоже мы наступали на одни грабли ))
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); }Вот это работает. А до классов я ещё не добрался.
Впиндюрил Ваш код в проект.
void loop() { MyClass* pointer1; MyClass* pointer2 = new MyClass; pointer1 = pointer2; // вот тут беда ))) "does not name a type"Собирается все. IDE 1.0.6. Вобще с указателями никаких внеплановых траблов в ардуине не замечал. GCC без замечаний ;)
ХЗ. Вот так работает:
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); }Мда, что-то ночью я жестко подтупил, сейчас аж стыдно )
бес попутал написать null, вместо NULL )
Ошибка заключалась в том, что я пытался присвоить указателю другой адрес вне функций , а глобально - это уже ночной бред ))
Вот такое оно - перое знакомство. Всем спасибо за помощь.