Arduino C++ — ошибка при попытке создать экземпляр класса с параметром шаблона, отличным от типа

Вот файл, в котором я пытаюсь создать экземпляр объекта «Мелодия»:

#include <Melodie.h>

Melodie<5> m(8);

void setup()
{

}

void loop()
{

}

Вот файл "Melodie.h":

#ifndef Melodie_H
#define Melodie_H

#include <Arduino.h>
#include "pitches.h"

template <int NB_NOTES>
class Melodie
{
public:
    Melodie(int pin)
    {
        // Some unimportant stuff
    }
    void addNote(int pitch, int duration)
    {
        // Some unimportant stuff
    }
    void play()
    {
        // Some unimportant stuff
    }

private:
    char notes_[NB_NOTES];
    char durations_[NB_NOTES];
    int  notePointer_;
    int  pin_;
};

#endif

Я получаю следующее сообщение об ошибке: ошибка: ожидаемый конструктор, деструктор или преобразование типа перед токеном '‹'

Почему? Тот же код работает (за исключением специфичных для Arduino вещей) и работает в Visual Studio. Я думал, что WinAVR поддерживает C++?


person Michael    schedule 07.10.2013    source источник
comment
Эти сообщения об ошибках содержат имя файла, номер строки и номер позиции. Пожалуйста, добавьте их к своему вопросу и отметьте соответствующее место в коде.   -  person us2012    schedule 07.10.2013
comment
+1 Кому интересно, строка с ошибкой Melodie<5> m(8);. Ищите ответ и на этот вопрос.   -  person Zak    schedule 03.03.2014
comment
К сожалению, я вообще не использовал шаблоны :(   -  person Michael    schedule 03.03.2014


Ответы (1)


Я попробовал и скомпилировал ваш код (GCC) без проблем с двумя небольшими изменениями.

  1. Изменить #include <Melodie.h> на #include "Melodie.h"
  2. закомментируйте следующее

    //#include <Arduino.h>
    
    //#include "pitches.h"
    

так как они не используются.

person CS Pei    schedule 07.10.2013
comment
как вы думаете, почему между #include <Melodie.h> и #include "Melodie.h" есть разница? - person ladislas; 08.10.2013
comment
Путь поиска отличается для <> и "". - person CS Pei; 08.10.2013
comment
-1 GCC не является компилятором для Arduino, это очень вводящий в заблуждение пост. - person Zak; 03.03.2014