Не работает конструктор класса
- Войдите на сайт для отправки комментариев
Чт, 27/09/2018 - 00:53
Подскажите, пожалуйста, что я делаю не так?
class Swich { public: uint8_t lamp_pin, pir_pin, light_pin, status_pin, close_pin; void use (); Swich(uint8_t light_pin, uint8_t lamp_pin, uint8_t pir_pin); // описание конструктора }; Swich::Swich(uint8_t light_pin, uint8_t lamp_pin, uint8_t pir_pin) { // конструктор Serial.println("!!!!!!!!!!"); } void Swich::use () { Serial.println(light_pin); Serial.println(lamp_pin); Serial.println(pir_pin); } Swich s1 (1, 2, 3); // создаем экземпляр void setup() { Serial.begin(9600); } void loop() { s1.use(); delay(5000); Serial.println(); }
Никак не хочет выполнятся конструктор, и передавать экземпляру класса значения переменных.
09
Serial
.println(
"!!!!!!!!!!"
);
Никак не хочет выполнятся конструктор, и передавать экземпляру класса значения переменных.
С чего Вы взяли, что он не выполняется?
Не печатает? Так, правильно, он выполняется раньше Вашего setup, поэтому Serial еще не проинициализирован. Поставьте вместо строки 9 такие строки и убедитесь, что он вызывается.
А то, что Ваш конструктор никак не использует переданные ему парамметры, так используйте, кто Вам мешает?
Спасибо, с выводом точно! Как то не догадался.
А то, что Ваш конструктор никак не использует переданные ему парамметры, так используйте, кто Вам мешает?
А вот параметры не передает это точно. При выполнении процедуры use он печатает все три нуля, хотя там должны быть переданные конструктором параметры 1, 2, 3...
Спасибо, с выводом точно! Как то не догадался.
А то, что Ваш конструктор никак не использует переданные ему парамметры, так используйте, кто Вам мешает?
А вот параметры не передает это точно. При выполнении процедуры use он печатает все три нуля, хотя там должны быть переданные конструктором параметры 1, 2, 3...
Ещё раз: конструктор работает. И вызывается РАНЬШЕ инициализации Serial.begin. Как думаешь - будет ДО инициализации Serial что-нибудь в него выведено? Тебе уже сказали - зажги в конструкторе светодиод, и убедись, что конструктор вызывается. Разоблачитель покровов, блин.
А вот параметры не передает это точно. При выполнении процедуры use он печатает все три нуля, хотя там должны быть переданные конструктором параметры 1, 2, 3...
А ты их где запоминаешь - ткни пальцем? То, что ты передаёшь параметры в конструктор - не делает их автоматически запоминаемыми в переменные экземпляра класса.
А вот параметры не передает это точно.
Передаёт - это точно. Аужчто с нимиделать. Вы сами решаете. Вы решили не делать ничего, вот с ними ничего и не делается.
Я же вроде выводить их пытался:
Serial
.println(light_pin); Но там нули
Я же вроде выводить их пытался:
Serial
.println(light_pin); Но там нули
Ещё раз: ответь на вопрос - ГДЕ ты сохраняешь переданные в конструктор класса параметры? Понимаешь, в чём проблема, нет? Ты в конструктор передаёшь параметры, но НИГДЕ их не сохраняешь. Может, стоит таки взять - и почитать, хоть чуть-чуть, основы С++?
В примере qwone постом выше строка 11 - это сохранение переданных в конструктор класса параметров в переменные класса. У тебя этого - нет, от слова "совсем".
Я же вроде выводить их пытался:
Serial
.println(light_pin); Но там нули
Что Вы пытались выводить? Параметры или свойства экземпляра класса? По-моему второе. А где Вы, простите, им что-либо присваиваете?
Ок понял спасибо!
Нужно указать в какую переменную передать параметры, и в моем случае это те самые переменные и есть, просто я наивно полагал что это произойдет в них..
Спасибо!
Молоток!
: light_pin(light_pin), lamp_pin(lamp_pin), pir_pin(pir_pin) {}
Вот зачем входящие и переменные назвал одинакого. Похоже тупой это судьба.
: light_pin(light_pin), lamp_pin(lamp_pin), pir_pin(pir_pin) {}
Вот зачем входящие и переменные назвал одинакого. Похоже тупой это судьба.
Квон - иногда лучше жевать...: https://stackoverflow.com/questions/6185020/initializing-member-variables-using-the-same-name-for-constructor-arguments-as-f/6185043#6185043
Всё легально, ибо - конструктор ;)
Всё легально, ибо - конструктор ;)
DIYMan, по-моему Квон имел в виду не легальность или ошибку, а то, что называть разные по смыслу переменные одним именем - это дурость, ведущая к путанице и ошибкам. И с такой манерой ТС, действительно, будет наступать на грабли, швабры и гвозди еще и еще.
Представь себе город, где в каждом районе есть своя улица Ленина. Ни один враг никогда не найдет засекреченных обьектов :)
Всё легально, ибо - конструктор ;)
DIYMan, по-моему Квон имел в виду не легальность или ошибку, а то, что называть разные по смыслу переменные одним именем - это дурость, ведущая к путанице и ошибкам. И с такой манерой ТС, действительно, будет наступать на грабли, швабры и гвозди еще и еще.
Представь себе город, где в каждом районе есть своя улица Ленина. Ни один враг никогда не найдет засекреченных обьектов :)
А где там одно имя? Вижу, что там просто параметры, передаваемые в конструктор класса, называются так же, как и переменные класса. Это - совершенно легально с точки зрения стандарта С++, никаких граблей, кроме неудобства при чтении.
Представь себе город, где в каждом районе есть своя улица Ленина. Ни один враг никогда не найдет засекреченных обьектов :)
С точки зрения секретности - лучше иметь три улицы Ленина в каждом городе, но никому об этом не говорить.
про секретность
Выпускник после института отправляется к месту работы - на секретное предприятие. Его инструктируют:
- От вокзала сядешь на 12 автобус и доедешь до конечной. Увидишь серый ангар без вывески - это ОНО! Ни у кого не спрашивай, а то задержат, как шпиона.
Вот он приезжает, садится в автобус, едет до конечной... и слышит "Следующая остановка - Ракетный завод! Конечная!"
сорри, если баян
иметь три улицы Ленина в каждом городе, но никому об этом не говорить.
«Ибанов – это литературный псевдоним; настоящая его фамилия – Ибанов»
(А. Зиновьев «Зияющие высоты»)
«Ибанов – это литературный псевдоним; настоящая его фамилия – Ибанов»
(А. Зиновьев «Зияющие высоты»)
(Алексей Михайлович Ридигер) "... принял решение принять монашество; (...........) он был пострижен с именем Алексий - в честь другого святого: не Алексия, человека Божия, именем которого был наречён в крещении, а Алексия, митрополита Киевского, святителя Московского."