Как правильно объявлять класс
- Войдите на сайт для отправки комментариев
Подскажите пожалуйста как правильно объявить класс?
насколько я понимаю класс не может существовать отдельно от библиотеки,т.е. для того что бы создать класс необходимо создать библиотеку которая состоит как минимум из 2х файлов: описание.h и реализация.cpp.
моя первая попытка создать класс привела к провалу затеи за основу был взят этот пример:
http://arduino.ru/Hacking/LibraryTutorial (класс морзе):
Я попытался на основе этого примера создать класс Motor для управления двигателем.
вот что написал я:
1. Motor.h
#include Arduino.h #ifndef Motor #define Motor class Motor { public: int Direction; int Speed; void Motor(int PIN1,int PIN2,int _PWMLEVELMIN,int _PWMLEVELMAX); void Run(int dir,int speeD); void Stop(); private: int PWMLEVELMIN; int PWMLEVELMAX; int DirPIN; int SpeedPIN; } #endif
2.Motor.cpp
#include "Motor.h" void Motor::Motor(int PIN1,int PIN2,int _PWMLEVELMIN,int _PWMLEVELMAX) { DirPIN=PIN1; SpeedPIN=PIN2; pinMode(DirPIN, OUTPUT); pinMode(SpeedPIN, OUTPUT); analogWrite(SpeedPIN,0); } void Motor::Run(int dir,int speeD) { Speed=speeD;Direction=dir; digitalWrite(DirPIN,Direction); analogWrite(SpeedPIN,abs(255*Direction-Speed)); } void Motor::Stop(); { Speed=0; Run(Direction;Speed); }
3. Сам скетч:
#include "Motor.h" Motor M1(4,5,50,200); Motor M2(4,5,50,200); void setup() { } void loop() { M1.Run(HIGH,127}; delay(20); M1.Stop; }
при компиляции выдаётся мнодество ошибок, почти все они связанны с неправильным объявлением класса и переменных, объясните пожалуйста где я накосячил в объявлениях и как правильно написать этот класс.
ошибки:
In file included from Motor.cpp:1:
Пишите только h фаил, если нужно будет cpp потом напишите.
Справа вверху в поиске наберите - Библиоткеа.
А ошибки Ваши переводчику скормите.
В первой ошибке гоаорится о том что имя файла надо или в кавычки заключить или в угловве скобки.
Удачи.
Для начала посмотри внимательно, как правильно пишется #ifndef #define в примере и как у тебя.
1. есть просто ошибки со скобками точкой-с-запятой и т.п.
2. PIN1 и PIN2 большими буквами - зарезервированы.;
3. #define Motor , а потоми Motor используем как имя класса. То есть сначала определяем его как пустое слово, а потом используем как имя, Мозг есть?
4. #include Arduino.h ?????????
без уголков и без кавычек? В примере на сайте так, но ведь дураку ясно, что это опечатка. Вы странный? Си не учили никогда?
====================
итого я довел это безобразие до компиляции. Ловите и сравнивайте:
Скетч:
библиотека:
Motor.h
и Motor.cpp
==============================
Теперь эта херня компилируется, что Вы хотите с ней дальше делать - уже не мое дело.
Счастья всем!
----
ЗЫ: Да, млин! Разберитесь уже с разницей уголков и кавычек в инклюде. Это, млин, совсем детская ошибка, ОДИН, ЧОрт возьми, раз прочитать, ...да хоть в гугле!!!!
Можно поподробнее?
#define Motor - лишнее?
Си лет 20 назад учил но тогда класы не нужно было запихивать в библиотеку, можно было прямо в тексте программы писать, эта хрень точно компилируется у вас? У меня отказывается.
То, что представлено, компилируется. Переносите внимательно и найдите свои старые ошибки с ";" и скобками. Если не выйдет - запечатайте Ардуино в коробку и отправьте в китай.... Может денег вернут.
Я еще подумал о том, почему вы можете тупить: а где вы складываете файлы библиотеки? Я догадываюсь.... Просто ответте.
Еще раз про #define Motor: я же привел вам правильный файл. Вы слепой или читать не умеете? Какими шестеренками мозга вы вопрос писали? Не в силах осознать все изменения в коде?
все файлы находятся в 1 дирректории и .ino и .h и .cpp
Я так и знал!
Вот откуда вы, такие беретесь, и, что главное, зачем пытаетесь программировать?
У меня растет IQ, скоро 18?
Ведь написано, там же, откуда вы брали пример библиотеки: создаете папку библиотеки в каталоге ./libraries.
В данном случае в папке со скетчами есть подпапка "libraries", в ней заводите папку "Motor", в нее размещаете .h и .cpp файлы.
И, войдя в среду зайдите в "скетч/Подключить библиотеку" и выберите "Motor".
=====================
в качестве домашенего задания: заствьте компилироваться все это, как у вас сейчас, из одного каталога.
Что надо поменять?
А вы? Где вас таких набирают вместо того что бы объяснить сидите на форуме и гадите в душу показывает что вы пуп земли, только от того что знаете что то чего не знают другие, да я не знаю и пр шел на форум за советом что бы научиться а не что бы вычитывать ваши нелесные высказывания о моём интеллекте, я никогда не стесняюсь показать что я чего то не знаю лучше спросить и узнать чем стесняться не знать. В любом случае спасибо вам за оказанную помощь в создании класса, этот урок надеюсь будет очень полезен для меня
меня по объявлению на должность гадёныша в душу набирали - что-то не так?
И да я почитал еще вчера про разницу скобок и кавычек получилось откомпилировать огромное спасибо.
Буду тренироваться создавать классы.
Тем, что вы обратились за помощью, вы, автоматом ставите себя в подчиненное положение и даете мне моральное право изгаляться как угодно, ПОКА ВЫ ЭТО ТЕРПИТЕ.
У вас есть чудесный способ не быть униженным - не терпеть. И не учиться.
Унижение ученика - один из САМЫХ действенных приемов. Правила создания класса вы теперь запомните навсегда.
Обратите внимание на то, что я - единственный, кто стал с вами возиться. Вероятно потому, что уровень "вопроса" был настолько ниже плинтуса, что даже Клапауций не заинтересовался (возможно к вашему счастью, он еще "лучше" меня).
Я то все таки научил, где-то за облаками мне в карму плюсик поставят.
даже Клапауций не заинтересовался (возможно к вашему счастью, он еще "лучше" меня).
я скромно прошу не преувеличивать мою квалификацию в написании классов - она ниже среднего, просто я потратил время на вникание в суть своей личной проблемы.
тем более, здесь не класс, а библиотека.
Я то все таки научил, где-то за облаками мне в карму плюсик поставят.
Нипаставлю.
Я думаю "за облаками" плюсики ставят совсем другие сущности.