Дед, все твои методы перенести можно, но придётся объявить их inline. Просто тупо перенести, добавив слово inline в начало. Но полностью от .cpp не избавишься, т.к. нельзя перенести ISR'ы и глобальное определение экземпляра (8-ая строка).
Ну, как, а если он нужен? Если в этом .h описан какой-нить класс, то его необходимо включать во все .cpp в которых этот класс используется. Иначе-то никак.
Если же поключаемый файл нужен везде, то его надо писать как библиотеку. Но если просто и на посмотреть то можно обойтись и одним файлом. А то так договорится можно, что нужны права на трёхколёсный велосипед, как на вождение фуры. Но похоже уже давно пошло обсуждение сферического коня в вакууме.
Ну, на нет и суда нет. Я ошибочно полагал, что qwonelib.h - как раз библиотека и есть, но благодаря Вашим объяснениям, я понял, что lib - это не от "library", а от "liberty" - подчёркивает, что автор свободен и пишет что хочет и как хочет. Давайте на этом и закончим.
Дед, все твои методы перенести можно, но придётся объявить их inline. Просто тупо перенести, добавив слово inline в начало. Но полностью от .cpp не избавишься, т.к. нельзя перенести ISR'ы и глобальное определение экземпляра (8-ая строка).
Заметил одну очень удобную штуку у ардуина ИДЕ. Если вам срочно нужно раскидать код по разным файлам, то просто нужно создать файл или файлы с расширением ino и перенести его туда. Ни каких #include, ничего этого не надо. Просто копипаст. Ардуина сама за вас все соединит.
По мне, так крайне вредная хреновина. Типа той, что IDE сама объявления функций в начало файла пихает. Сколько уже "памагити" из-за этой фичи тут разбиралось.
Заметил одну очень удобную штуку у ардуина ИДЕ....
Densl - я уже вам советовал - не пользуйтесь костылями. учитесь ходить самостоятельно.
Если бы Ардуино ИДЕ вас не приучила к плохому - к тому что что функции можно раскидывать по коду как угодно, в любом порядке, не заботясь об их обьявлении - всей этой ветки бы не было...
Вот эта ваша "удобная штука" - ровно такой же костыль, как и та. с которой началась эта ветка.
Заметил одну очень удобную штуку у ардуина ИДЕ. Если вам срочно нужно раскидать код по разным файлам, то просто нужно создать файл или файлы с расширением ino и перенести его туда. Ни каких #include, ничего этого не надо. Просто копипаст. Ардуина сама за вас все соединит.
//file const.h
1. enum myint{a,b,c}
Ладно, разобрался с этим. #pragma once не хватало.
Но все равно ошибок как снежный ком посыпалось в моей программе как перенес функции в cpp файл. В общем буду разбираться, спасибо.
Я перенес свои функции в cpp файл. Если в них используются классы из библиотеки, лучше передавать их в функцию как параметр или есть ещё варианты? А то они не объявленые получаются.
Я перенес свои функции в cpp файл. Если в них используются классы из библиотеки, лучше передавать их в функцию как параметр или есть ещё варианты? А то они не объявленые получаются.
передавать по ссылке.
Вообще, если начали разносить функции по файлам - возьмите себе за правило как можно меньше обьявлять глобальных переменных. Все переменные, используемые в функции - должны быть либо локальными переменными этой функции. либо переданы как параметр.
и еще - поначалу у вас получатся функции с кучей паарметров. Это говорит о том, что ваша функция слишком велика. Пишите функции так, чтобы они помещались на одной, реже на двух страницах используемого редактора кода. Если функция получилась длиннее - значит нужно ее разбивать на части.
В идеале весь код должен состоять из процедур и функций длиной не более 20-50 строчек и вызываемых с 3-5 параметрами
//file const.h
1. enum myint{a,b,c}
Ладно, разобрался с этим. #pragma once не хватало.
Но все равно ошибок как снежный ком посыпалось в моей программе как перенес функции в cpp файл. В общем буду разбираться, спасибо.
В общем не понимаю, если файл const.h включён в main.ino и какой нибудь f.h то ничего не работает Если в const.h имеется хоть одна переменная, допустим int myInt =0;
Если тоже самое через define объявить то ошибок сборки нет.
В общем не понимаю, если файл const.h включён в main.ino и какой нибудь f.h то ничего не работает Если в const.h имеется хоть одна переменная, допустим int myInt =0; Если тоже самое через define объявить то ошибок сборки нет.
а что тут непонятного? define вы можете обьявлять сколько угодно раз, а переменную в одной и той же области видимости - только однажды
Возьмите себе за правило не обьявлять переменные в .h файлах.
Ну и вообще стоит стремится к "чистоплотности" в отношенни переменных - максимально использовать локальные переменные уровня файла и процедуры. Считайте для себя "запрещенным" использовать внутри процедур переменные, описанные вне данной процедуры. Только локальные переменные и передаваемые процедуре параметры.
и тогда большая часть ваших проблем исчезнет сама собой.
Дед, все твои методы перенести можно, но придётся объявить их inline. Просто тупо перенести, добавив слово inline в начало. Но полностью от .cpp не избавишься, т.к. нельзя перенести ISR'ы и глобальное определение экземпляра (8-ая строка).
Ну, как, а если он нужен? Если в этом .h описан какой-нить класс, то его необходимо включать во все .cpp в которых этот класс используется. Иначе-то никак.
Если же поключаемый файл нужен везде, то его надо писать как библиотеку. Но если просто и на посмотреть то можно обойтись и одним файлом. А то так договорится можно, что нужны права на трёхколёсный велосипед, как на вождение фуры. Но похоже уже давно пошло обсуждение сферического коня в вакууме.
Дед, все твои методы перенести можно, но придётся объявить их inline. Просто тупо перенести, добавив слово inline в начало. Но полностью от .cpp не избавишься, т.к. нельзя перенести ISR'ы и глобальное определение экземпляра (8-ая строка).
ну оть. я подозревалъ
Заметил одну очень удобную штуку у ардуина ИДЕ. Если вам срочно нужно раскидать код по разным файлам, то просто нужно создать файл или файлы с расширением ino и перенести его туда. Ни каких #include, ничего этого не надо. Просто копипаст. Ардуина сама за вас все соединит.
Densl - я уже вам советовал - не пользуйтесь костылями. учитесь ходить самостоятельно.
Если бы Ардуино ИДЕ вас не приучила к плохому - к тому что что функции можно раскидывать по коду как угодно, в любом порядке, не заботясь об их обьявлении - всей этой ветки бы не было...
Вот эта ваша "удобная штука" - ровно такой же костыль, как и та. с которой началась эта ветка.
срабатывает далеко не всегда )))
1. Объявление функции:
2. Определение функции:
3. *.ino файл:
[/quote]
Если myint имеет тип enum и определяется в файле const.h, то этот пример не работает. Пишет multiple definition. Как победить?
//file const.h
1. enum myint{a,b,c}
Ладно, разобрался с этим. #pragma once не хватало.
Но все равно ошибок как снежный ком посыпалось в моей программе как перенес функции в cpp файл. В общем буду разбираться, спасибо.
а как компилятор должен разбираца, какую функцию вызывать, с пустым параметром или с параметром по умолчанию?
int myFunc(void);
int myFunc(int param = 0);
а как компилятор должен разбираца
А интуиция и искусственный интеллект на что? ИИ вообще нашефсё - за недостатком естественного только на него и надежда.
полный ambiguous налицо
"На лицо" бывает "факт", а эта хреновина скорее "на рыло". Нет?
полный ambiguous налицо
"На лицо" бывает "факт", а эта хреновина скорее "на рыло". Нет?
Наерна, да.
Эта чьё, простите, "рыло" Вы тут упоминаете? Не надо мне этой хреновины!
Я перенес свои функции в cpp файл. Если в них используются классы из библиотеки, лучше передавать их в функцию как параметр или есть ещё варианты? А то они не объявленые получаются.
передавать по ссылке.
Вообще, если начали разносить функции по файлам - возьмите себе за правило как можно меньше обьявлять глобальных переменных. Все переменные, используемые в функции - должны быть либо локальными переменными этой функции. либо переданы как параметр.
и еще - поначалу у вас получатся функции с кучей паарметров. Это говорит о том, что ваша функция слишком велика. Пишите функции так, чтобы они помещались на одной, реже на двух страницах используемого редактора кода. Если функция получилась длиннее - значит нужно ее разбивать на части.
В идеале весь код должен состоять из процедур и функций длиной не более 20-50 строчек и вызываемых с 3-5 параметрами
Не надо мне этой хреновины!
Ну, тогда давайте вечерком накатим за нерушимый блок свинорылых и котомордых!
1. enum myint{a,b,c}
Ладно, разобрался с этим. #pragma once не хватало.
Но все равно ошибок как снежный ком посыпалось в моей программе как перенес функции в cpp файл. В общем буду разбираться, спасибо.
В общем не понимаю, если файл const.h включён в main.ino и какой нибудь f.h то ничего не работает Если в const.h имеется хоть одна переменная, допустим int myInt =0;
Если тоже самое через define объявить то ошибок сборки нет.
а что тут непонятного? define вы можете обьявлять сколько угодно раз, а переменную в одной и той же области видимости - только однажды
Возьмите себе за правило не обьявлять переменные в .h файлах.
Ну и вообще стоит стремится к "чистоплотности" в отношенни переменных - максимально использовать локальные переменные уровня файла и процедуры. Считайте для себя "запрещенным" использовать внутри процедур переменные, описанные вне данной процедуры. Только локальные переменные и передаваемые процедуре параметры.
и тогда большая часть ваших проблем исчезнет сама собой.