Parse error in template argument list ардуино

«Конец» не может использоваться в функции шаблона

Я хочу использовать простую структуру с переменными-членами с именами start и end в шаблоне функции:

Но эта программа не может быть скомпилирована на mingw g ++ 4.8.2 с:

Почему нет? Что не так с моим кодом?

4 ответа

Это явно ошибка gcc (в частности, 10200, хотя есть несколько дубликатов с множеством разных примеров). [temp.names] утверждает:

Когда имя специализации шаблона члена появляется после. или -> в постфиксном-выражении или после вложенный-указатель-имени в квалифицированный-идентификатор , а объектное выражение постфиксного-выражения является зависимым от типа или спецификатор вложенного-имени в квалифицированном-идентификаторе указывает на зависимый тип, но имя не является членом Для текущего экземпляра (14.6.2.1) имя шаблона элемента должно начинаться с ключевого слова template . В противном случае предполагается, что имя не является шаблоном. [Пример:

v1 и v2 зависят от типа , поэтому следует предполагать, что имя не является шаблоном из-за пропущенного ключевого слова template и <> следует рассматривать как меньше, как в приведенном выше примере.

Не говоря уже о том, что [basic.lookup.classref] утверждает, что:

Идентификатор сначала ищется в классе объекта. выражение. Если идентификатор не найден, он затем ищется в контексте всего postfix-expression и должен назвать шаблон класса.

И end явно должен быть найден в классе объектного выражения — в конце концов, это простая переменная-член. Тот факт, что это сбой для end только из-за столкновения с std::end() , еще больше подтверждает идею ошибки, поскольку эту область видимости никогда не следовало рассматривать с самого начала.

Забавно, но самое простое решение просто: не используйте <>!

Думаю, пока можно проверить состояние в обратном порядке.

Источник

Parse error in template argument list FastLED WS2182B about fastled HOT 2 CLOSED

Comments (2)

It’s complaining about DATA_PIN_A / strip 1. Is DATA_PIN_A defined correctly? It may be an invalid pin. Check for invalid pin errors.

WhatsThisBoxFor commented on January 15, 2023

It’s complaining about DATA_PIN_A / strip 1. Is DATA_PIN_A defined correctly? It may be an invalid pin. Check for invalid pin errors.

That was Exactly it! Somehow, I deleted the PIN number after the DATA_PIN_A definition. Thank You!

  • LED setup HOT 3
  • Read data from another controller HOT 2
  • Support for TM1908 HOT 4
  • D1mini and 8 led ring HOT 4
  • Too slow data rate for dotstar HOT 5
  • Hardware SPI on ESP32-S3 HOT 8
  • Seeed nRF52 mbed-enabled board — compiling error
  • I2S Support on ESP32-C3 HOT 9
  • Sudden validpin() compilation error without changes. HOT 4
  • CRGB::Red and CRGB::Green are inverted HOT 5
  • Does not compile for esp32 with latest arduino appimage and arduino updated libs etc
  • Documentation on wave functions could be vastly improved with one tiny addition. HOT 1
  • Going over 10 multiple controller pins crashes ESP32-S2 HOT 3
  • Potential issue with dithering support HOT 4
  • Complie error platforms/arm/stm32/fastpin_arm_stm32.h:58:88: error: incomplete type ‘__gen_struct_GPIOC’ used in nested name specifier HOT 3
  • ISO C++17 does not allow ‘register’ storage class specifier anymore HOT 6
  • ESP8266 + FastLED 3.5.0 + WS2812 = 13us gap after first LED
  • [Question] Do I have to worry about using «delete»? HOT 3
  • Serial input error when using fast LED HOT 5
  • stm32 clockless : minor speed improvement

Recommend Projects

React

A declarative, efficient, and flexible JavaScript library for building user interfaces.

Vue.js

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

Typescript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

TensorFlow

An Open Source Machine Learning Framework for Everyone

Django

The Web framework for perfectionists with deadlines.

Laravel

A PHP framework for web artisans

Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

javascript

JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

Some thing interesting about web. New door for the world.

server

A server is a program made to process requests and deliver data to clients.

Machine learning

Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

Visualization

Some thing interesting about visualization, use data art

Some thing interesting about game, make everyone happy.

Recommend Org

Facebook

We are working to build community through open source technology. NB: members must have two-factor auth.

Microsoft

Open source projects and samples from Microsoft.

Источник

Parse error in template argument list ардуино

Подключаться буду к выходу операционника. Пока на кнопке тренируюсь. Еще раз спасибо за подсказку Александру.

Все равно тень «не полная»: диоды зажигаются плавно, а гаснут резко.

АВРчик

Добрый вечер,
Извиняюсь заранее если в терминологии напутал.
Подскажите пожалуйста, а какой будет правильный синтаксис объявления\инициализации микролед если я хочу инициализировать в setup, но чтобы была доступна отовсюду.
По типу вот так (указателями это вроде называется):

Но так не работает, ругается что темплейт запрещает объявляться без параметров:

microtest3:48:1: error: invalid use of template-name ‘microLED’ without an argument list
microLED *strip;
^

microtest3.ino:48:1: note: class template argument deduction is only available with -std=c++1z or -std=gnu++1z

microLED.h:151:7: note: ‘template class microLED’ declared here
class microLED <
^

exit status 1
invalid use of template-name ‘microLED’ without an argument list

Ах да, версия библиотеки последняя — 3.1.

АВРчик

АВРчик

Из одного выходит другое. В конечном счёте мне нужно тоже самое — динамически присваивать размер массива.

bort707

значения ORDER_BRG и ORDER_GBR взаимно перепутаны.

Кстати, в предыдущей версии ORDER_BRG тоже было неверно описано.

bort707

никак. В текущей версии библиотеки число светодиодов ленты включено в параметры шаблона, поэтому создать указатель на обьект можно только зная заранее правильное число диодов в ленте.

Надо чуть переписать библиотеку, чтобы темплейт не включал число светодиодов.
Лучше, наверно, как раньше, передавать обьекту типа microLED указатель на внешний массив светодиодов.
Хотя по мне проще пользоваться версией 2. и не переходить на новую. Пусть авторы ее допилят сначала.

AlexeyZZZ

Александр Симонов

Вложения

AlexeyZZZ

Александр Симонов

@AlexeyZZZ, тонкости AVR-ассемблера, в некоторых командах не все регистры можно использовать, а в коде библиотеки не прописаны эти ограничения при распихивании переменных по регистрам. По тексту ошибки можно нагуглить обсуждения и решение.

По-хорошему бы, @AlexGyver самому стоило бы глянуть и исправить, может я чего-нибудь другое сломал этим решением.

AlexseyShva

In file included from D:\LEDstairs-master (1)\LEDstairs-master\firmware\LEDstairs_v1.1\LEDstairs_v1.1.ino:45:0:

Источник

[C++11,сказка] Символы для обжатия параметров шаблонов выбраны ошибочно?

Сообщество, посмотри, а не ошибочно ли выбраны символы для обжатия шаблонных параметров.

Итак, жили-были две функции:

И на лексемы разбирались они успешно и без конфликтов.

И был у них друг помошник:

Лексер и его на лексемы разбирал.

Но пришли злые шаблоногородители и по нагородили шаблонов.

Нагородили шаблонные структуры типа таких:

и переменные типа таких:

А лексер всё стоял и терпел. Он всё успешно на лексемы разбирал.

Но радилась как-то в коде функция типа такой:

И не выдержал лексер:

Не понял он что хотят от него.

. да как же вам объяснить?
А давайте я заменю » » на «>».

И не понял лексер, что хотят от него.

А потом уродилось в коде ещё и это:

Но лексер терпел.

Терпел, да не выдержал.

Решил он забить на дело гиблое:

И ужёл он к другим стандартописателям.

tags: черновик, сказка, С++11, шаблоны, макросы, лексер

Adler
Да, труп страуса сделал неудачный выбор скобок для параметров шаблона

Закопайте уже труп стюардессы страуса.Adler

> void func2(a =8>=8);
Так верстают только чудаки.

>void func2(a =8>=8); // fail
Прежде чем давать дефолтное значение аргументу, дай ему имя.
Это все-равно что писать: int = 2+2

>F(map ,m); //fail
Возьми ( и ) — расставлять по вкусу.

«понапишу-ка я фигни и буду утверждать, что это проблема компилятора и языка»-тред.

Adler
> void func1(bool=8>=8); //ok

Вон из профессии.

Adler
> void func2(a =8>=8); // fail
а если написать по нормальному
void func2(a var=8>=8); // ok

=A=L=X=
> Adler
> > void func1(bool=8>=8); //ok
> Вон из профессии.

4) Declares an unnamed parameter with a default value

eMan.Lived
> А что не так?

Уважайте коллег. Пишите разборчиво.

Kartonagnick
> Уважайте коллег. Пишите разборчиво.
В свою очередь уважайте тех, для кого программирование не профессиональная деятельность, но хобби.

eMan.Lived
> В свою очередь уважайте тех, для кого программирование не профессиональная
> деятельность, но хобби.

Я уважаю, поэтому стараюсь писать максимально разборчиво. Что бы даже дилетанты смогли понять.

Так ведь у ТС всё тоже разборчиво — код подаётся небольшими порциями, перемежающимися собственными рассуждениями. Если же у кого-то возникла проблема с «распарсиванием» кода, то это скорее всего признак квалификации «распарсивающего», а не автора темы.

Kartonagnick
> Я уважаю, поэтому стараюсь писать максимально разборчиво.
Хочешь сказать, что Adler не старался, или, старался, но недостаточно? 🙂

eMan.Lived
> Так ведь у ТС всё тоже разборчиво — код подаётся небольшими порциями,
> перемежающимися собственными рассуждениями. Если же у кого-то возникла проблема
> с «распарсиванием» кода, то это скорее всего признак квалификации
> «распарсивающего», а не автора темы.

Объясните это своему компилятору и его разработчикам.

eMan.Lived
> Хочешь сказать, что Adler не старался, или, старался, но недостаточно? 🙂

Хочу сказать, что контекстно-зависимые правила языка достаточно сложны.
Поэтому, нет ничего удивительного в том, что какую то редкую конструкцию компилятор не смог распарсить.

Однако факт — компиляторы тестируют на рабоспосбность, отрабатывая все стандартные юзкейсы.

Поэтому, спотыкаются компили только на нестандартных, черезвычайно редких конструкциях языка.

Вывод: подобного рода «нежданчики» сегодня таятся далеко за пределами нормального использования. И проявляются только у извращенцев, которые пишут код через жеппу.

Лично меня мало волнуют трудности компилятора. Меня волнуют трудности людей. Которым это придется читать и поддерживать.

Поэтому, я поддерживаю. За такое:

=A=L=X=
> > void func1(bool=8>=8); //ok
> Вон из профессии.

Источник

не компилируется портянка

Здравствуйте, что-то подвис на компиляции такого. подскажите, как поправить

Смотрел 2 секунды на код, пишу только то, что увидел, никаких гарантий

пробовал… не помогает

Ты откуда в С++ залез? Вылезай, либо срочно за букварь.

Хотя после этого:

Хотя тебе уже ответили. Ну похоже мамкин гений попросту не осилил понять что и где менять. Меняй лучше.

ты понимаешь вообще, что это упрощенный пример? если есть что-то по теме, то продемонстрируй, а просто так не флуди

Тебе уже ответили. Тебе сказали даже как починить. Флудишь тут ты.

Такое мог высрать только тот, кто даже на базовом уровне не знает языка. Вот тебя резонно послали за сесть за букварь и не позориться.

Ты можешь тупить где-нибудь в другом месте, не на ЛОРе?

Для облегчения жизни в будущем:

  • приводи ошибки компилятора, если ты просто скажешь — «нет, всё равно ошибка» немногие будут гадать, что у тебя там не так
  • упрощённый пример должен быть корректным, т. е. демонстрировать все проблемы(как поправить то, что ты привёл в ОП анон подсказал, если есть что ещё — см. п. 1)

да, typename… точно, спасибо

Анонимус, уходи. Надоел со своим вечным пессимизмом, ступай на свой Ычан и целуй ноги Соуса.

xperious , сейчас попробую покумекать над вашей «лапшой», сходу могу сказать, что const перед типом ставится, ЕМНИП.

да, разобрался, в реальности просто портянка гораздо менее читаемая была, сдуру влепил typename в список аргументов шаблона

Ну вот и славно.

да ошибка вот такая была:

error: parse error in template argument list return func_impl (self, arg1, arg2, arg3, false); ^

смысл, думаю, приводить то…

сходу могу сказать, что const перед типом ставится

Источник

Читайте также:  8007efe ошибка обновления windows 7
Smartadm.ru
Adblock
detector