Почему я не могу объявить класс на другой вкладке в Arduino IDE?

Я хотел переместить часть своего кода на вторую вкладку в Arduino IDE, чтобы все было лучше организовано. Сначала я только попытался переместить функцию, и, похоже, она работала нормально. Я мог бы вызвать функцию из функции setup() на моей основной вкладке, и не было никаких проблем с компиляцией или загрузкой.

Тем не менее, я попробовал поместить весь класс во вторую вкладку, и внезапно это не сработало. Например:

Вкладка 1:

TestClass obj;

void setup()
{
    obj.init();
}

void loop()
{
    //...
}

Вкладка 2:

class TestClass
{
public:
    void init()
    {
        //...
    }
};

Когда я попытался скомпилировать это, он дал мне следующие ошибки:

tab1:1: error: 'TestClass' does not name a type
tab1.ino: In function 'void setup()':
tab1:5: error: 'obj' was not declared in this scope

Почему он распознает функцию на другой вкладке, но не является классом? Есть ли способ заставить его работать в среде разработки Arduino, или мне нужно использовать альтернативу, например Eclipse?

18 голосов | спросил Peter Bloomfield 13 FebruaryEurope/MoscowbThu, 13 Feb 2014 19:03:20 +0400000000pmThu, 13 Feb 2014 19:03:20 +040014 2014, 19:03:20

2 ответа


12

Невозможно объявить и использовать классы, объявленные в одном файле .pde, в другом файле .pde из IDE Arduino.

Один из способов - сделать второй файл в исходном файле C ++ (.cpp), а затем добавить директиву #include "<filename>" в начале первого файла.


Этот код правильно компилируется:

Вкладка 1:

#include "test.cpp"

TestClass obj;

void setup()
{
    obj.init();
}

void loop()
{
    //...
}

test.cpp:

class TestClass
{
public:
    void init()
    {
        //...
    }
};
ответил asheeshr 13 FebruaryEurope/MoscowbThu, 13 Feb 2014 20:21:09 +0400000000pmThu, 13 Feb 2014 20:21:09 +040014 2014, 20:21:09
6

Как работает IDE Arduino, он компилирует ваш код (код, который вы пишете в среде IDE) как «основной» код. Затем он извлекает код из всех импортированных вами библиотек и компилирует их вместе с основным кодом. Чтобы сделать то, что вы предлагаете, вам потребуется создать библиотеку для Arduino.

Вот еще информация о библиотеках Arduino:

http://arduino.cc/ru/Guide/Libraries

И вот некоторые из них о том, как создать библиотеку:

http://arduino.cc/en/Hacking/LibraryTutorial //этот проще всего понять imo
http://playground.arduino.cc/Code/Library
http://www.divilabs.com /2013/03/write-your-own-arduino-library.html#

Вот пример библиотеки, которую я написал https://github.com/jamolnng /Arduino /tree /master /libraries /ShiftRegister , как вы можете видеть, нет проблем с вызовом функций Arduino из файла .cpp (я знаю, я протестировал библиотеку)

ответил Jesse Laning 13 FebruaryEurope/MoscowbThu, 13 Feb 2014 20:21:34 +0400000000pmThu, 13 Feb 2014 20:21:34 +040014 2014, 20:21:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132