В этих строках описана переменная с таким именем, а там используется тип данных с таким именем - т.е. там это слово используется как имя класса. Повторяю вопрос - Вы отличаете имя переменной от имени класса? Или Вы и в Яве так делали? В общем, Вы меня окончательно убедили, что знания Ява у Вас на уровне цикла for и не больше.
В этих строках описана переменная с таким именем, а там используется тип данных с таким именем - т.е. там это слово используется как имя класса. Повторяю вопрос - Вы отличаете имя переменной от имени класса? Или Вы и в Яве так делали? В общем, Вы меня окончательно убедили, что знания Ява у Вас на уровне цикла for и не больше.
да с этим разобрался.
вынес требуемые пременные в отдельный файл .h - компилируется, работает.
Да, нет, это показывает только то, что Вы не умеете правильно на файлы разбивать и ничего больше.
еслиб я умел, я б не спрашивал....
Что бы понять ответы вам нужно знать некую базу. И это не я разбил. Это и есть тот код которым пользуются и который работает. Можно много раз жаловаться на качество дороги, но другой дороги нет, вот и жалуются и едут. А суперские дороги они только в вашей бошке и нигде больше.
ну если знаешь болеше меня - помоги, мои вопросы больше упираются с ситаксис языка. лучше учиться на конкретных задачах, а не просто читать всё подряд. я ведб не прошу реализовать логигу программы чтоб что-тоработало - это у меня получается без внешних помощников. система работает считывает с внешних устройств. отображает.
Я уже написал, как у себя сделал. Не подошло? Что ж... А в извращениях с рефлексией у меня участвовать желания нет.
дак с рефлексией проблем нет - все шикарно работает(и без стрингов), тут вопрос в другом вынестти функции в отдельный файл, а вызываются эти функции через рефлексию или нет это отдельный вопрос. к данному топику не относится
а рекомендации с дополнительным файлом с глобальными переменными - говорит о том , что и среди знатоков есть ..
рекомендация абсолютно верная, именно так это и делается - глобальные определения выносятся в отдельный файл, который потом подключается ко всем остальным файлам проекта. А чтобы не было повтороных определений и ошибок редефайна - файл заключается в директивы препроцессора #ifdef, чтобы определения подключались только один раз
рекомендация абсолютно верная, именно так это и делается - глобальные определения выносятся в отдельный файл, который потом подключается ко всем остальным файлам проекта. А чтобы не было повтороных определений и ошибок редефайна - файл заключается в директивы препроцессора #ifdef, чтобы определения подключались только один раз
но тогда получается , что это раносильно простому отсутствию этого файла?
но тогда получается , что это раносильно простому отсутствию этого файла?
с чего бы это?
тогда пожалуйта покажи правильное использование такого, если я делаю так
#include "Xxx06.h"
#ifndef Global.h
#define Global_h
void Xxx06::xxx06() {
uint8_t* d_in = (uint8_t*)&data_in; // тут 'data_in' was not declared in this scope
STRto9100* st = (STRto9100*)&buf;
st->address = d_in[0];
st->command = 0x03;
st->reg = 0xED10;
st->data = 0x01;
getMBCRC();
memcpy(for_serv, &"xxx06u| ", 12); //зполняем буфер командой что будет обрабатывать это сообщение на сервере
}
#endif
потому что это бред. Ты проверяешь на существование макрос "Global.h", а потом определяешь "Global_h", в результате ничего не работает. Макрос должен быть один и тот же.
Ну и дальше - где у тебя директива #include ? Кто за тебя будет подключать файл-то?
Чтобы не добавлять это в каждый файл, этот #ifdef вставляют в сам файл Global.h - так проще.
Директива #ifndef проверяет, определено ли имя CPPSTUDIO_H, если нет, то управление передаётся директиве #define и определяется интерфейс класса. Если же имя CPPSTUDIO_H уже определено, управление передаётся директиве #endif. Таким образом, исключается возможность многократного определения класса CPPSTUDIO_H.
Обратите внимание на то, как написано имя класса, используемое в сочетании с директивами препроцессорной обёртки — CPPSTUDIO_H.
#ifndef /*ИМЯ ЗАГОЛОВОЧНОГО ФАЙЛА_H*/
#define /*ИМЯ ЗАГОЛОВОЧНОГО ФАЙЛА_H*/
// определение класса
#endif /*ИМЯ ЗАГОЛОВОЧНОГО ФАЙЛА_H*/
чем отличается от моего?
у меня сейчас такая ошибка cannot convert 'Xxx06::xxx06' from type 'void (Xxx06::)()' to type 'const FunctionPointer {aka void (* const)()}'
у меня сейчас такая ошибка cannot convert 'Xxx06::xxx06' from type 'void (Xxx06::)()' to type 'const FunctionPointer {aka void (* const)()}'
Разумеется вы должны понять, чем методы статические от не статических отличаются. Вот и компилятор говорит - не могу нестатический метод в статический перевести.
у меня сейчас такая ошибка cannot convert 'Xxx06::xxx06' from type 'void (Xxx06::)()' to type 'const FunctionPointer {aka void (* const)()}'
Слушайте, я Вам искренне хочу помочь, но мое терпение иссякает.
Если хотите помощи, давайте вы будете выклдывать тексты ЦЕЛИКОМ (для особо тупых - Ц Е Л И К О М). Вы нелостаточно квалифицированны, чтобы грамотно выделить нужный кусок. Поэтому только целиком. Не умничайте!
Вот в Вашем вопросе. Вы выложили текст в котором НЕТ описания типа FunctionPointer , а ругань идёт именно на него. Ну, и как Вам помогать, скажите на милость? Ну, как?
Я сегодня уже второй раз Вам пишу - выкладывайте код целиком. Третий раз писать не буду - лень выдложить, значит не очень-то и надо разбираться.
хотя я думал, что одног раза выкладывания достаточно
Недостаточно. Вы не думайте, а с каждым новым вопросм - выкладывайте заново.
С того мометна как Выложили, Вы уже несколько раз заявляли, что что-то меняли. Ну, а раз меняли - выкладывайте. Доверия к правильности Ваших изменений - 0.
В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа
void f(void)
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
Евгений - человек тыкается как слепой котёнок, пытаясь угадать слово. Что вы хотите при таком раскладе? Послать его нахер читать основы С++ - самый лучший вариант, а то так и будет дичь тут нести.
хотя я думал, что одног раза выкладывания достаточно
Недостаточно. Вы не думайте, а с каждым новым вопросм - выкладывайте заново.
С того мометна как Выложили, Вы уже несколько раз заявляли, что что-то меняли. Ну, а раз меняли - выкладывайте. Доверия к правильности Ваших изменений - 0.
В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа
void f(void)
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
в то куске ничего не менялось, потому как в нем всё рабочее, просто нужно этот кусок один в один поместить в отдельный файл, в нем и есть те "глобальные" , которые используются в "выделённых в отдельные файлы" функциях.
полный или не полный, но в таком виде работает, когда все в одном ino.
А применять Вы его пытаетесь к методу класса, отсюда и ошибка. как переделать? все что там перечислено({xxx04, xxx05, xxx06_.xxx06};)должно бвть разнесено по разным файлам.
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
Евгений - человек тыкается как слепой котёнок, пытаясь угадать слово. Что вы хотите при таком раскладе? Послать его нахер читать основы С++ - самый лучший вариант, а то так и будет дичь тут нести.
Грубо, зато правда.
послать - легко, а если вы прови , то вам длжно быть просто показать что надо изменить. лучше один раз увидеть, чем тыкаться по книгам в надежде найти нужное для данного применения, я подобное только на одном сайте нашёл, но как применить к моей ситуации не понятно.
послать - легко, а если вы прови , то вам длжно быть просто показать что надо изменить. лучше один раз увидеть, чем тыкаться по книгам в надежде найти нужное для данного применения, я подобное только на одном сайте нашёл, но как применить к моей ситуации не понятно.
Бла-бла. Приведу простую аналогию: прежде, чем прочитать книгу - изучают алфавит по букварю. Ты же - пытаешься даже не прочитать, а написать книгу, не изучив букварь. Верхоглядка ты наша.
Понимаете, просто написать самому, а вот объяснить что-то человеку. имеющему нулевой уровень ... попробуйте объяснить слепому границу, между натурализмом Сезанна и экзистенциализмом Моне, если он никогда не видел ни того, ни другого.
У Вас недостаточный уровень, чтобы Вам можно было что-то объяснить, а читать учебник Вы отказываетесь. Ну, что ж, сам себе злобный буратино.
можно посылать гуглилить, можно посылать читать, а можно показать пример как изменить код. создаётся впечатление, что многие сами не знают как это сделать. и что б не потерять реноме - начинают посылать. есть недостаточно информации - я покажу всё что требуется. говорите - надо изучать чудой код, а сами не хотите предоставить вариант кода.
Понимаете, просто написать самому, а вот объяснить что-то человеку. имеющему нулевой уровень .
когда один объясняет другому - есть две стороны, та которая объясняет и та которая слушает объяснения . если слушающая сторона не может понять объясняющую - так может в этом есть и вина объясняющей, что не может правильно донести знаний?
но пока я не одного обяснения не прочитал, пока только посылают.
я не отказываюсь читать книги, но на примерах, по конкретным вопросам изучать намного качественнее.
JonHappy1, человеку, имеющему нулевой уровень, бесполезно объяснять, его можно только обучать. Т.е. бесполезно отвечать на его вопросы. Чтобы добиться успеха, обучающий должен сам выбирать для него задания, а не идти на поводу у ученика.
В задачи форума (и форумчан) не входит обучение кого-либо с нуля. Тем более, что это, скорее всего, невозможно - заочная форма обучения требует некоторой начальной подготовки.
Есть и еще один важный момент: все люди разные, и у каждого свои способности по обучению. Средний человек обычно способен освоить что-то самостоятельно, пользуясь литературой, а сегодня еще и видеоуроками. Если человек этого не может, то и попытки обучать его наверняка окажутся тяжелыми, нудными и малопродуктивными.
Ваше "вот здесь" не имеет никакого отношения к Вашему вопросу от слова абсолютно.
Тыкать в место можно того, кто в целом знаем и надо освежить в памяти конктретную вещь. Вы же не знаете ничего от слова совсем (и про знания Явы с Паскалем - тоже сказки, Вы их тоже не знаете от слова совсем).
Поэтому тыкаю: первая страница. Читать подряд. Выполняя на компьютере все примеры и разбирая их. С первой страницы до последней.
ЕвгенийП! я так понимаю - у Вас понтов больше , чем сповобностей что-то объяснять?
сложно было сказать, что для выноса функции не нужно использовать классы? а не городить такое:
В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа void f(void). А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
т.е. Вы не хотите прото объяснить простое, а с понтами показываете своё превосходство? я ведь не спорю , что вы знаете больше.
ЕвгенийП! я так понимаю - у Вас понтов больше , чем сповобностей что-то объяснять?
сложно было сказать, что для выноса функции не нужно использовать классы?
А нахера их вообще было использовать изначально. Вам что, ЕвгенийП их посоветовал использовать или еще кто-то?
Если вы броситесь в окно, то будете лететь и орать "сложно было сказать, чтобы не бросался, а спустился по лестнице"?
С какого х... все виноваты в ваших бедах? Выбрали неправильный подход изначально, теперь мозги всем полоскаете тут сутками.
Я - все. Помогите мне развидеть эту тему. Афтар, пока не прчтешь K&R, не ходи сюда больше.
Пойду я, лучше, закусь пожарю. Удачи.
c 19 по 25 строку
В этих строках описана переменная с таким именем, а там используется тип данных с таким именем - т.е. там это слово используется как имя класса. Повторяю вопрос - Вы отличаете имя переменной от имени класса? Или Вы и в Яве так делали? В общем, Вы меня окончательно убедили, что знания Ява у Вас на уровне цикла for и не больше.
c 19 по 25 строку
В этих строках описана переменная с таким именем, а там используется тип данных с таким именем - т.е. там это слово используется как имя класса. Повторяю вопрос - Вы отличаете имя переменной от имени класса? Или Вы и в Яве так делали? В общем, Вы меня окончательно убедили, что знания Ява у Вас на уровне цикла for и не больше.
вынес требуемые пременные в отдельный файл .h - компилируется, работает.
создаю два файла .h и .cpp следую этому уроку http://mypractic.ru/urok-9-sozdanie-biblioteki-dlya-arduino.html
Xxx06.h
Xxx06.cpp
в ino добавляю такое
при наличии фалов Xxx начинает ругаться на такие строки в файле Global.h (куда вынесены переменные)
byte count_in = 0;
'byte' does not name a type
а рекомендации с дополнительным файлом с глобальными переменными - говорит о том , что и среди знатоков есть ..
а именно если сделать #include "Global.h" в файле Xxx06.h то получится ошибка редефайн...
вот такоt extern byte buf[8]; в файле Xxx06.h на этапе компиляции пока прокатывает, но возникают проблемы со структурами , кк их сделать extern?
при наличии фалов Xxx начинает ругаться на такие строки в файле Global.h (куда вынесены переменные)
byte count_in = 0;
'byte' does not name a type
Ну, поставьте в начале #include <arduino.h> ... и ... прочитайте, наконец, учебник по языку.
а рекомендации с дополнительным файлом с глобальными переменными - говорит о том , что и среди знатоков есть ..
Да, нет, это показывает только то, что Вы не умеете правильно на файлы разбивать и ничего больше.
Ну сколько можно . Всем известная библиотека LiquidCrystal_I2C.h https://github.com/marcoschwartz/LiquidCrystal_I2C
А библиотека Wire.h для нее глобальная. Запустите поиск этого файла на своем компьютере. Найдите и посмотрите.
Опять же "C:\Program Files\Arduino\libraries" находятся библиотеки Ардуино.
А здесь ядро файлов Ардуино "C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino"
Да, нет, это показывает только то, что Вы не умеете правильно на файлы разбивать и ничего больше.
еслиб я умел, я б не спрашивал....
тут http://microsin.net/programming/arm-troubleshooting-faq/how-use-extern.html есть подобное, но честно - я не смог разобраться в применении к моему варианту. мне было б проще если б на на моих файлах показали. написать пример трудно, а разводить ругань
Программиста учить - только портить.
Да, нет, это показывает только то, что Вы не умеете правильно на файлы разбивать и ничего больше.
еслиб я умел, я б не спрашивал....
"Программиста" учить - только портить.
Программиста учить - только портить.
там нет струтур
Я вообще не программист, если что.
Я вообще не программист, если что.
Я уже написал, как у себя сделал. Не подошло? Что ж... А в извращениях с рефлексией у меня участвовать желания нет.
Я уже написал, как у себя сделал. Не подошло? Что ж... А в извращениях с рефлексией у меня участвовать желания нет.
а рекомендации с дополнительным файлом с глобальными переменными - говорит о том , что и среди знатоков есть ..
рекомендация абсолютно верная, именно так это и делается - глобальные определения выносятся в отдельный файл, который потом подключается ко всем остальным файлам проекта. А чтобы не было повтороных определений и ошибок редефайна - файл заключается в директивы препроцессора #ifdef, чтобы определения подключались только один раз
Семён по трезвянке еще сболтнул про #pragma once. Вычитал в своем Страуструпе, поди.
И глобальные переменные отличаются от глобальных определений. Так что сначала бы разобраться куда кого выносят..
но тогда получается , что это раносильно простому отсутствию этого файла?
с чего бы это?
И глобальные переменные отличаются от глобальных определений. Так что сначала бы разобраться куда кого выносят..
сорри, я имел в вижу переменные.
но тогда получается , что это раносильно простому отсутствию этого файла?
с чего бы это?
В define guard заключается всё содержимое .h файла.
В define guard заключается всё содержимое .h файла.
Давайте посмотрим на строку №1
[/quote]
потому что это бред. Ты проверяешь на существование макрос "Global.h", а потом определяешь "Global_h", в результате ничего не работает. Макрос должен быть один и тот же.
Ну и дальше - где у тебя директива #include ? Кто за тебя будет подключать файл-то?
Чтобы не добавлять это в каждый файл, этот #ifdef вставляют в сам файл Global.h - так проще.
файл Xxx06.cpp
файл Xxx06.h
файл Global.h
файл .ino
что не правильно?
что не правильно?
я выше расписал, что неправильно. почему снова макросы разные? Ты вообще понимаешь, как пара #ifndef #define работает?
работает так
Директива #ifndef проверяет, определено ли имя CPPSTUDIO_H, если нет, то управление передаётся директиве #define и определяется интерфейс класса. Если же имя CPPSTUDIO_H уже определено, управление передаётся директиве #endif. Таким образом, исключается возможность многократного определения класса CPPSTUDIO_H.
Обратите внимание на то, как написано имя класса, используемое в сочетании с директивами препроцессорной обёртки — CPPSTUDIO_H.
чем отличается от моего?
у меня сейчас такая ошибка cannot convert 'Xxx06::xxx06' from type 'void (Xxx06::)()' to type 'const FunctionPointer {aka void (* const)()}'
у меня сейчас такая ошибка cannot convert 'Xxx06::xxx06' from type 'void (Xxx06::)()' to type 'const FunctionPointer {aka void (* const)()}'
Слушайте, я Вам искренне хочу помочь, но мое терпение иссякает.
Если хотите помощи, давайте вы будете выклдывать тексты ЦЕЛИКОМ (для особо тупых - Ц Е Л И К О М). Вы нелостаточно квалифицированны, чтобы грамотно выделить нужный кусок. Поэтому только целиком. Не умничайте!
Вот в Вашем вопросе. Вы выложили текст в котором НЕТ описания типа FunctionPointer , а ругань идёт именно на него. Ну, и как Вам помогать, скажите на милость? Ну, как?
Я сегодня уже второй раз Вам пишу - выкладывайте код целиком. Третий раз писать не буду - лень выдложить, значит не очень-то и надо разбираться.
вот
если всё в одном ino - всё работает. не только компилируется, а работает как надо.
хотя я думал, что одног раза выкладывания достаточно http://arduino.ru/forum/programmirovanie/sozdanie-biblioteki-0#comment-3...
хотя я думал, что одног раза выкладывания достаточно
Недостаточно. Вы не думайте, а с каждым новым вопросм - выкладывайте заново.
С того мометна как Выложили, Вы уже несколько раз заявляли, что что-то меняли. Ну, а раз меняли - выкладывайте. Доверия к правильности Ваших изменений - 0.
В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа
void f(void)
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
Евгений - человек тыкается как слепой котёнок, пытаясь угадать слово. Что вы хотите при таком раскладе? Послать его нахер читать основы С++ - самый лучший вариант, а то так и будет дичь тут нести.
Грубо, зато правда.
хотя я думал, что одног раза выкладывания достаточно
Недостаточно. Вы не думайте, а с каждым новым вопросм - выкладывайте заново.
С того мометна как Выложили, Вы уже несколько раз заявляли, что что-то меняли. Ну, а раз меняли - выкладывайте. Доверия к правильности Ваших изменений - 0.
В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа
void f(void)
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
полный или не полный, но в таком виде работает, когда все в одном ino.
А применять Вы его пытаетесь к методу класса, отсюда и ошибка. как переделать? все что там перечислено({xxx04, xxx05, xxx06_.xxx06};)должно бвть разнесено по разным файлам.
А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
Евгений - человек тыкается как слепой котёнок, пытаясь угадать слово. Что вы хотите при таком раскладе? Послать его нахер читать основы С++ - самый лучший вариант, а то так и будет дичь тут нести.
Грубо, зато правда.
послать - легко, а если вы прови , то вам длжно быть просто показать что надо изменить. лучше один раз увидеть, чем тыкаться по книгам в надежде найти нужное для данного применения, я подобное только на одном сайте нашёл, но как применить к моей ситуации не понятно.
Бла-бла. Приведу простую аналогию: прежде, чем прочитать книгу - изучают алфавит по букварю. Ты же - пытаешься даже не прочитать, а написать книгу, не изучив букварь. Верхоглядка ты наша.
У Вас недостаточный уровень, чтобы Вам можно было что-то объяснить, а читать учебник Вы отказываетесь. Ну, что ж, сам себе злобный буратино.
можно посылать гуглилить, можно посылать читать, а можно показать пример как изменить код. создаётся впечатление, что многие сами не знают как это сделать. и что б не потерять реноме - начинают посылать. есть недостаточно информации - я покажу всё что требуется. говорите - надо изучать чудой код, а сами не хотите предоставить вариант кода.
Понимаете, просто написать самому, а вот объяснить что-то человеку. имеющему нулевой уровень .
когда один объясняет другому - есть две стороны, та которая объясняет и та которая слушает объяснения . если слушающая сторона не может понять объясняющую - так может в этом есть и вина объясняющей, что не может правильно донести знаний?
но пока я не одного обяснения не прочитал, пока только посылают.
я не отказываюсь читать книги, но на примерах, по конкретным вопросам изучать намного качественнее.
JonHappy1, человеку, имеющему нулевой уровень, бесполезно объяснять, его можно только обучать. Т.е. бесполезно отвечать на его вопросы. Чтобы добиться успеха, обучающий должен сам выбирать для него задания, а не идти на поводу у ученика.
В задачи форума (и форумчан) не входит обучение кого-либо с нуля. Тем более, что это, скорее всего, невозможно - заочная форма обучения требует некоторой начальной подготовки.
Есть и еще один важный момент: все люди разные, и у каждого свои способности по обучению. Средний человек обычно способен освоить что-то самостоятельно, пользуясь литературой, а сегодня еще и видеоуроками. Если человек этого не может, то и попытки обучать его наверняка окажутся тяжелыми, нудными и малопродуктивными.
разобрался сам, но остался вопрос
typedef struct STRto9100_ дублирует структуру STRto9100, описанную в ino. как от этого избавиться?
создаётся впечатление, что многие сами не знают как это сделать. и что б не потерять реноме - начинают посылать.
Так и есть
как от этого избавиться?
Прочитать, наконец, учебник.
ткни на место в учебнике.
вот есть ответ на подобный вопрос
http://qaru.site/questions/2082614/c-error-a-storage-class-can-only-be-s...
но только "вероятно"
такое можно прочитать в учебнике?
ткни на место в учебнике.
вот есть ответ на подобный вопрос
Ваше "вот здесь" не имеет никакого отношения к Вашему вопросу от слова абсолютно.
Тыкать в место можно того, кто в целом знаем и надо освежить в памяти конктретную вещь. Вы же не знаете ничего от слова совсем (и про знания Явы с Паскалем - тоже сказки, Вы их тоже не знаете от слова совсем).
Поэтому тыкаю: первая страница. Читать подряд. Выполняя на компьютере все примеры и разбирая их. С первой страницы до последней.
ЕвгенийП! я так понимаю - у Вас понтов больше , чем сповобностей что-то объяснять?
сложно было сказать, что для выноса функции не нужно использовать классы? а не городить такое:
В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа void f(void). А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
т.е. Вы не хотите прото объяснить простое, а с понтами показываете своё превосходство? я ведь не спорю , что вы знаете больше.
Б-ть, феерический дебил. Заслужил, получи.
Берем такую программу
И делаем из нее библиотеку
.ino
verLib.h
verLib.cpp
развиваем дальше .ino
verLib.h
verLib.cpp
2qwone! спасибо, но как использовать структуры?
ЕвгенийП! я так понимаю - у Вас понтов больше , чем сповобностей что-то объяснять?
сложно было сказать, что для выноса функции не нужно использовать классы?
А нахера их вообще было использовать изначально. Вам что, ЕвгенийП их посоветовал использовать или еще кто-то?
Если вы броситесь в окно, то будете лететь и орать "сложно было сказать, чтобы не бросался, а спустился по лестнице"?
С какого х... все виноваты в ваших бедах? Выбрали неправильный подход изначально, теперь мозги всем полоскаете тут сутками.
И наконец это файл .ino
verLib.h
verLib.cpp