Та уже вынесете же свой STRto9100 в отдельный .h и .c. И подключайте его. И в Xxx06.h, и в .ino и везде где надо.
А послан ты был после того как наглеть начинаеш, примеры требовать и орать "ниработает". Запомни, чмо, если у тя что неработает - это по причине твоей тупости недающей понять что те говорят и из-за кривых твоих рук неспособных реализовать что надо. Пиз.уй читать учебники, хватит тут мозг выносить форуму.
в "SendToServer.h" тут используется wsclient.send()
если я правильно понимаю, ток моменту include "SendToServer.h", WebSocketClient- уже должн быть обработан?
и в SendToServer.h я могу написатьextern WebSocketClient wsclient; ?
но я получаю - 'WebSocketClient' does not name a type
я так понимаю - у Вас понтов больше , чем сповобностей что-то объяснять?
Таки да!
Вам уже и я, и другие устали говорить - невозможно объяснить ничего тому, кто не знает самых базовых основ. Потом способностей что-то объяснить Вам у меня 0, а понтов несколько больше.
JonHappy1 пишет:
сложно было сказать, что для выноса функции не нужно использовать классы?
Вы сейчас сказали бред, непонятный ни одному специалисту. Т.е. Вы не знаете терминологии и требуете, чтобы Вам объясняли в "ваших терминах". ну, неоткуда мне знать, что Вы изволите называть "выносом функции". Вынос мозга - понимаю, а вынос функции - нет такого понятия.
JonHappy1 пишет:
а не городить такое: В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа void f(void). А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
А вот это как раз совершенно правильное объяснение. И то, что Вы не понимаете базовой терминологии - ну, потому Вам и невозможно ничего объяснить. Вам уже ХЗ сколько раз сказали - читайте учебник от корки до корки. Никакие коды и примеры не помогут тому, что не знает базовых основ. Нужны систематические знания, тогда только коды с примерами смогут помочь.
JonHappy1 пишет:
т.е. Вы не хотите прото объяснить простое
Я не не хочу, а не умею объяснять так, как Вам просто, т.е. в несуществующей терминологии. которую Вы сами себе придумали, т.к. я её не знаю. Я объяснил проще некуда, но Вы, видимо не поняли половины слов, т.к. нормальных терминов Вы не знаете. И читать упорно не хотите - дело Ваше.
JonHappy1 пишет:
я ведь не спорю , что вы знаете больше.
Ну, во первых, спорите. По любому замечанию кидаетесь доказывать свою правоту. Иначе этого топика бы не было после моего поста №7, где Вам прямо сказали, что так делать не нужно. А во-вторых, Вы даже не представляете себе насколько мне пофигу спорите Вы или нет :)))
... в каком порядке происходит компиляция файлов подключаемых по include? ..
Не знаю как у кого, а у меня попкорн кончился.
Вам УЖЕ правильно отписали: "откройте для себя ПРЕПРОЦЕССОР".
Препроцессор, это такая примитивная приблуда к компилятору, которая модифицирует ваш исходный ТЕКСТ файла и только ПОТОМ отдает его компилятору. И ТОЛЬКО. Ничего больше он не делает.
В каком порядке происходит компиляция? НИ В КАКОМ, ибо нет "порядка", а есть ОДИН файл с программой, который и компилируется.
Директива #include всего лишь вставляет текст из указанного файла в ЭТО МЕСТО. В результате все равно остается ОДИН файл (тот КУДА вставилось).
Директива #define всего лишь создает кусок текста, заменяющий указанное имя по ВСЕМУ файлу. Что указали в директиве как замену ТАК ОНО И БУДЕТ изменено по всему файлу. Это НЕ переменные или inline функции, это просто КУСКИ ТЕКСТА.
Директивы #ifdef, #elif, #end это всего лишь УСЛОВНЫЙ #include, который вставляет указанное место .. угу, тоже КУСКИ ТЕКСТА.
Есть ещё интересные директивы у препроцессора, которыми можно собирать весьма витееватый результат .. но это уже сами прочтете. И ещё: препроцессор НЕ рекурсивный, хотя так МОЖЕТ показаться.. :)
Отсюда:
Посмотрите на свои поделки и сами скажите какой файл получается видит компилятор (что и куда втыкает препроцессор).
вы должны уяснить 3 главных понятия :объявление, определение и вызов. Ну и что за чем должно следовать и что можно переставить местами. http://cppstudio.com/post/5291/ Это касается и структур и классов.
ПС: Это и есть кусочек базовых знаний. Но там еще море таких кусочков.
// вставка текста из файла io.h в это место из каталога "по умолчанию" компилятора
// используются УГЛОВЫЕ скобки.
#include <io.h>
// вставка текста из файла my_io.h в это место из того же каталога,
// где лежит компилируемый файл. Используются двойные кавычки:
#include "my_io.h"
// вставка текста из файла io.h в это место из каталога "по умолчанию" компилятора
// используются УГЛОВЫЕ скобки.
#include <io.h>
// вставка текста из файла my_io.h в это место из того же каталога,
// где лежит компилируемый файл. Используются двойные кавычки:
#include "my_io.h"
т.е. к этому месту wsclient должен быть определён. а компилятор ругается 'wsclient1' was not declared in this scope при вызове в фале SendToServer.cpp wsclient1.send(.....)
c:\Temp\arduino_build_858586\sketch\sketch_jun10a.ino.cpp.o (symbol from plugin): In function `wsclient':
(.text+0x0): multiple definition of `SendToServer()'
c:\Temp\arduino_build_858586\sketch\SendToServer.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Тебе как человеку говорили, "хотите помощи - выкладывайте код полностью". Тебе какое-то из слов в этой фразе непонятно? Или ты настолько туп, что непонятен общий смысл фразы? В таком случае, тебе может помочь только вот это, уж извини.
c:\Temp\arduino_build_858586\sketch\sketch_jun10a.ino.cpp.o (symbol from plugin): In function `wsclient':
(.text+0x0): multiple definition of `SendToServer()'
c:\Temp\arduino_build_858586\sketch\SendToServer.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Как сделать wsclient, доступным я Вам сказал. С ним всё нормально. А нахрена SendToServer() Вы в двух местах определили, хто ж Вас знает?
Тебе как человеку говорили, "хотите помощи - выкладывайте код полностью". Тебе какое-то из слов в этой фразе непонятно? Или ты настолько туп, что непонятен общий смысл фразы? В таком случае, тебе может помочь только вот это, уж извини.
если я функцию SendToServer переношу в ino, причем есть ещё один файл Xxx06.h в котором
в Бельгии есть город Huy (без шуток, реально - можете в гугле проверить). Я там был в 1988 в составе делегации и нас прингласили на прём к мэру. Мэр подарила нам всем серебрянные тарелки и галстуки с крупно написанным названием города. Галстук я тогда тестю передарил. Кажется он его так ни разу и не надевал :))))
они отличаются тем что в одном надо исполивать объект из ino., а этот работает без проблем
есть ещё
SendTo9100.h
#include <Arduino.h>
#ifndef SendTo9100_h
#define SendTo9100_h
#include "struct.h"
void SendTo9100();
extern void SendTo9100();
extern uint8_t data_in[10]; //место для входных данных с сервера
extern uint8_t for_serv[12]; //место для данных отправляемых на сервер
extern byte buf[8];//место для хранения данных для отправки на устройство
#endif
Упоротый. Ещё и слепошарый. Не, из принципа по делу ничего писать не буду - буду тупо отсылать читать учебник по С++. Может, проймёт, хотя, судя по всему - навряд ли.
Страшно жить, пиздец как страшно: когда представишь, что где-то вот так же учится хирург, например. Кругом одни ущербы, поколение пепси, млять.
Такая же пляска но через классы
verLib.h
verLib.cpp
2qwone! у меня несколько другая задача
http://arduino.ru/forum/programmirovanie/sozdanie-biblioteki-0?page=1#comment-377100
есть в памяти byte buf[8], я хочу его заполнить более наглядным образом
для этого я опрелелил в ino тип струттуры STRto9100.
и "накладываю" эту структуру на память buf.
дело в том , что типа такого Xxx06.h заголовочных файлов будет много, и прописывать в каждом структуру не ахти как.
Так напишите в еще одном структуру, а потом через include включай-те в каждый.
Так напишите в еще одном структуру, а потом через include включай-те в каждый.
как всё просто ....
Ну... хоть с десятого раза дошло, что все писали.
Ну... хоть с десятого раза дошло, что все писали.
Ну... хоть с десятого раза дошло, что все писали.
Гониш! Тебе черным по белому написано было.
Та уже вынесете же свой STRto9100 в отдельный .h и .c. И подключайте его. И в Xxx06.h, и в .ino и везде где надо.
А послан ты был после того как наглеть начинаеш, примеры требовать и орать "ниработает". Запомни, чмо, если у тя что неработает - это по причине твоей тупости недающей понять что те говорят и из-за кривых твоих рук неспособных реализовать что надо. Пиз.уй читать учебники, хватит тут мозг выносить форуму.
в потоке г... трудно разглядеть что-то полезное.
в потоке г... трудно разглядеть что-то полезное.
Ну так и я о том же - ты тут столько говна уже вылил на всех, что просто пипец. Иди читай основы С++, иначе тебя тут просто зачморят.
в потоке г... трудно разглядеть что-то полезное.
Откройте для себя препроцессор с++!
Запустите:
arduino-1.8.5\hardware\tools\avr\bin\avr-cpp.exe -CC -mmcu=atmega328p "-I..\..\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-I..\..\arduino-1.8.5\hardware\arduino\avr\variants\eightanaloginputs" TestLib.ino TestLib.out
И в файле TestLib.out увидите свой, собранный препроцессором код, с которым потом мучается компилятор.
Пожалейте компилятор, он старается как может.
давайте не будем дале ругаться.
есть следующий вопрос в продолжении темы.
в каком порядке происходит компиляция файлов подключаемых по include?
у меня есть в ino
в "SendToServer.h" тут используется wsclient.send()
если я правильно понимаю, ток моменту include "SendToServer.h", WebSocketClient- уже должн быть обработан?
и в SendToServer.h я могу написатьextern WebSocketClient wsclient; ?
но я получаю - 'WebSocketClient' does not name a type
если другой вариант
в WebSocketClient.h есть
в "глобальном " файле структур
иесть ещё два файла .h в которых производится вызов #include "struct.h"
но тогда я получаю ошибку
multiple definition of `wsclient'
я так понимаю - у Вас понтов больше , чем сповобностей что-то объяснять?
Таки да!
Вам уже и я, и другие устали говорить - невозможно объяснить ничего тому, кто не знает самых базовых основ. Потом способностей что-то объяснить Вам у меня 0, а понтов несколько больше.
сложно было сказать, что для выноса функции не нужно использовать классы?
Вы сейчас сказали бред, непонятный ни одному специалисту. Т.е. Вы не знаете терминологии и требуете, чтобы Вам объясняли в "ваших терминах". ну, неоткуда мне знать, что Вы изволите называть "выносом функции". Вынос мозга - понимаю, а вынос функции - нет такого понятия.
а не городить такое: В том коде, на который Вы ссылаетесь (кстати, и он неполный), тип FunctionPointer описан как указатель на функция типа void f(void). А применять Вы его пытаетесь к методу класса, отсюда и ошибка.
А вот это как раз совершенно правильное объяснение. И то, что Вы не понимаете базовой терминологии - ну, потому Вам и невозможно ничего объяснить. Вам уже ХЗ сколько раз сказали - читайте учебник от корки до корки. Никакие коды и примеры не помогут тому, что не знает базовых основ. Нужны систематические знания, тогда только коды с примерами смогут помочь.
т.е. Вы не хотите прото объяснить простое
Я не не хочу, а не умею объяснять так, как Вам просто, т.е. в несуществующей терминологии. которую Вы сами себе придумали, т.к. я её не знаю. Я объяснил проще некуда, но Вы, видимо не поняли половины слов, т.к. нормальных терминов Вы не знаете. И читать упорно не хотите - дело Ваше.
Не знаю как у кого, а у меня попкорн кончился.
Вам УЖЕ правильно отписали: "откройте для себя ПРЕПРОЦЕССОР".
Препроцессор, это такая примитивная приблуда к компилятору, которая модифицирует ваш исходный ТЕКСТ файла и только ПОТОМ отдает его компилятору. И ТОЛЬКО. Ничего больше он не делает.
В каком порядке происходит компиляция? НИ В КАКОМ, ибо нет "порядка", а есть ОДИН файл с программой, который и компилируется.
Директива #include всего лишь вставляет текст из указанного файла в ЭТО МЕСТО. В результате все равно остается ОДИН файл (тот КУДА вставилось).
Директива #define всего лишь создает кусок текста, заменяющий указанное имя по ВСЕМУ файлу. Что указали в директиве как замену ТАК ОНО И БУДЕТ изменено по всему файлу. Это НЕ переменные или inline функции, это просто КУСКИ ТЕКСТА.
Директивы #ifdef, #elif, #end это всего лишь УСЛОВНЫЙ #include, который вставляет указанное место .. угу, тоже КУСКИ ТЕКСТА.
Есть ещё интересные директивы у препроцессора, которыми можно собирать весьма витееватый результат .. но это уже сами прочтете. И ещё: препроцессор НЕ рекурсивный, хотя так МОЖЕТ показаться.. :)
Отсюда:
Посмотрите на свои поделки и сами скажите какой файл получается видит компилятор (что и куда втыкает препроцессор).
вы должны уяснить 3 главных понятия :объявление, определение и вызов. Ну и что за чем должно следовать и что можно переставить местами. http://cppstudio.com/post/5291/ Это касается и структур и классов.
ПС: Это и есть кусочек базовых знаний. Но там еще море таких кусочков.
https://www.linux.org.ru/forum/development/8036747
Разве в жабе оно не так же про "определения", "объявления" и "вызова"? Чел вроде как жабу знает .. хотя сомнения гложут уже не тока меня.. :)
Р Чел вроде как жабу знает
В смысле "Hello, world" запускал и вроде работало.
Человек хочет чтоб ему не сертификат пожаловали, а именную серебряную пулю в затылок от Российской Федерации.
Разве в жабе оно не так же про "определения", "объявления" и "вызова"? Чел вроде как жабу знает .. хотя сомнения гложут уже не тока меня.. :)
Короче, все, пятница, вечер, мне давно уже пора калдырить. Отбивайте тут сами атаки клоунов. Справитесь, поди.
arduino-1.8.5\hardware\tools\avr\bin\avr-cpp.exe -CC -mmcu=atmega328p "-I..\..\arduino-1.8.5\hardware\arduino\avr\cores\arduino" "-I..\..\arduino-1.8.5\hardware\arduino\avr\variants\eightanaloginputs" TestLib.ino TestLib.out
как путик библиотекам указать
как путик библиотекам указать
Откройте еще для себя:
arduino-1.8.5\hardware\tools\avr\bin\avr-cpp.exe -v --help
Обратите внимание на:
-I <dir> Add <dir> to the end of the main include path
Типа так.
Типа так.
вопрос был для командной строки препроцессора
в ino есть загрузка
#include "WebSocketClient.h"
затем создаюю объект класса
WebSocketClient wsclient;
как сделать доступным именно этот объект в в файлах cpp ?
в ino такой порядок
а в SendToServer.h прописано extern wsclient;
т.е. к этому месту wsclient должен быть определён. а компилятор ругается 'wsclient1' was not declared in this scope при вызове в фале SendToServer.cpp wsclient1.send(.....)
перечитайте описание extern еще раз.
в ino есть загрузка
#include "WebSocketClient.h"
затем создаюю объект класса
WebSocketClient wsclient;
как сделать доступным именно этот объект в в файлах cpp ?
Блин, ну насколько ж надо лениться прочитать учебник, чтобы с каждой мелочью побираться на форуме?
Да напишите Вы в своём .cpp
extern WebSocketClient wsclient;
и будьте счастливы. Только #include <WebSocketClient.h> не забудьте.
Только я уже говорил и повторяю - так писать - ужасное говнопроектирование. Готовьтесь ловить глюки в программе до посинения.
Готовьтесь ловить глюки в программе до посинения.
Представляется мне, что этот крест - наш.
Только некоторые к нему ещё гирьки привязывают, чтоб жизнь мёдом не казалась.
Таки думаете, что одними гвоздями дело не обойдется?
у меня в SendToServer.h прописано ещё
void SendToServer();
extern void SendTo9100();
extern uint8_t data_in[10];
и на это не ругается
перечитайте описание extern еще раз. - прочитал кучу, но не нашёл ответа
Интересно, как вы вообще на яве пишете.
SendToServer.cpp
компилятор
c:\Temp\arduino_build_858586\sketch\sketch_jun10a.ino.cpp.o (symbol from plugin): In function `wsclient':
(.text+0x0): multiple definition of `SendToServer()'
c:\Temp\arduino_build_858586\sketch\SendToServer.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
у меня в SendToServer.h прописано ещё
void SendToServer();
extern void SendTo9100();
extern uint8_t data_in[10];
и на это не ругается
Тебе как человеку говорили, "хотите помощи - выкладывайте код полностью". Тебе какое-то из слов в этой фразе непонятно? Или ты настолько туп, что непонятен общий смысл фразы? В таком случае, тебе может помочь только вот это, уж извини.
SendToServer.cpp
компилятор
c:\Temp\arduino_build_858586\sketch\sketch_jun10a.ino.cpp.o (symbol from plugin): In function `wsclient':
(.text+0x0): multiple definition of `SendToServer()'
c:\Temp\arduino_build_858586\sketch\SendToServer.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Как сделать wsclient, доступным я Вам сказал. С ним всё нормально. А нахрена SendToServer() Вы в двух местах определили, хто ж Вас знает?
у меня в SendToServer.h прописано ещё
void SendToServer();
extern void SendTo9100();
extern uint8_t data_in[10];
и на это не ругается
Тебе как человеку говорили, "хотите помощи - выкладывайте код полностью". Тебе какое-то из слов в этой фразе непонятно? Или ты настолько туп, что непонятен общий смысл фразы? В таком случае, тебе может помочь только вот это, уж извини.
если я функцию SendToServer переношу в ino, причем есть ещё один файл Xxx06.h в котором
то все и компилируется и работает
а в SendToServer.h прописано extern wsclient;
т.е. к этому месту wsclient должен быть определён. а компилятор ругается 'wsclient1' was not declared
Застрелиться и не встать!
Ну, определён wsclient, а wsclient1 то тут при чём?
Или в Яве можно определить перемнную "a", а всякие "а1" и "а2" она сама доопределяет?
это опечатка тут
если я функцию SendToServer переношу в ino, причем есть ещё один файл Xxx06.h в котором
то все и компилируется и работает
Опять огрызок кода. Слушай, иди наxyй. Задрал уже.
А я пошёл на "ищу исполнителя" искать, кто мне идиотометр сделат - решил бизнесам заняться - продавать прибор всем форумам и группам в сети.
Это -> в Сургут()
это опечатка тут
В таком случае, так не бывает. Значит Вы как всегда.
1. накосячили в коде
2. не выложили код.
Я ещё вчера Вам писал, что без полного кода я с Вами не разговарию. Попытаться что-то подсказать было ошибкой.
Если Вам лень не только читать учебник, но даже выкладывать код, то я присоединяюсь к Воротам.
Буду четвёртым в очереди на посыл тела в пешее эротическое. Феерический долбоёб. И пиздобол, к тому же - на яве он программирует, ага.
DetSimen,
в Бельгии есть город Huy (без шуток, реально - можете в гугле проверить). Я там был в 1988 в составе делегации и нас прингласили на прём к мэру. Мэр подарила нам всем серебрянные тарелки и галстуки с крупно написанным названием города. Галстук я тогда тестю передарил. Кажется он его так ни разу и не надевал :))))
Галстук я тогда тестю передарил.
Ахах :) Кастую этот галстук в подарок топикстартеру :) :) :)
Опять огрызок кода. Слушай, иди наxyй. Задрал уже. это весь файл Xxx06.h
это весь файл Xxx06.cpp
они отличаются тем что в одном надо исполивать объект из ino., а этот работает без проблем
есть ещё
SendTo9100.h
SendTo9100.cpp
структуры их одинаковы. но в третьем добавляется использование объекта определённого в ino. и он не хочет компилироваться.
Упоротый. Ещё и слепошарый. Не, из принципа по делу ничего писать не буду - буду тупо отсылать читать учебник по С++. Может, проймёт, хотя, судя по всему - навряд ли.
Страшно жить, пиздец как страшно: когда представишь, что где-то вот так же учится хирург, например. Кругом одни ущербы, поколение пепси, млять.
Ну, типа вот. Приглашаю в тему.
вот вместо этого
перечитайте описание extern еще раз.
написать это
Да напишите Вы в своём .cpp
extern WebSocketClient wsclient;
и будьте счастливы. Только #include <WebSocketClient.h> не забудьте.
и небыло б всяких проб с файлами , где изменил,где поправил, отвлёкся забыл....
ЕвгенийП! спасибо, вот только такого использования я не нашёл.
Читай учебник С++, идиот!
вот вместо этого
перечитайте описание extern еще раз.
Свои претензии можете направлять в а/я 666 или на Королёва-12 (передача "В гостях у сказки"). Я вам ничего не задолжал, слава богу.
ПС: Похоже в будущем можно будет доверять операции роботам-хирургам.