I recently got the following error when trying to compile with gcc:
error: missing binary operator before token «(«
Web and SO searches came up with several specific examples of this error, with specific code changes to fix them. But I found no general description of what condition causes this error to be issued.
When and why does gcc emit this error?
asked Jan 24, 2014 at 17:08
0
This is not a compiler error, it is a preprocessor error. It occurs when the preprocessor encounters invalid syntax while trying to evaluate an expression in a #if
or #elif
directive.
One common cause is the sizeof
operator in an #if
directive:
For example:
#define NBITS (sizeof(TYPE)*8)
//later
#if (NBITS>16) //ERROR
This is an error because sizeof
is evaluated by the compiler, not the preprocesor.
Type casts are also not valid preprocessor syntax:
#define ALLBITS ((unsigned int) -1)
//later
#if (ALLBITS>0xFFFF) //ERROR
The rules for what can be in a valid expression are here.
Note also that #if
will evaluate an undefined macro as 0, unless it looks like it takes arguments, in which case you also get this error:
So if THIS
is undefined:
#if THIS == 0 //valid, true
#if THIS > 0 //valid, false
#if THIS() == 0 //invalid. ERROR
Typos in your #if
statement can also cause this message.
answered Jan 24, 2014 at 17:08
AShellyAShelly
34.5k15 gold badges90 silver badges151 bronze badges
3
If you are on Linux, make sure that you do not have a header named features.h
inside your project files.
I had one with this name, which resulted in:
/usr/include/x86_64-linux-gnu/bits/huge_val.h:25: error: function pointer expected
or
/usr/include/bits/huge_val.h:26:18: error: missing binary operator before token
«(«
That is because some system headers like huge_val.h
use macros like __GNUC_PREREQ
that are defined by /usr/include/features.h
(learn more about this header in this SO question).
In my case I first saw this error when I started to use gcc’s -I option which suddenly made gcc select my project include directory before the default system include directories.
answered Nov 30, 2018 at 23:31
1
You get this error sometimes if you have -fno-operator-names
in your compiler flags. I suffered from the exact error while building json
and this solved it.
answered Aug 15, 2019 at 21:03
check the direct. no space,no special
exp:
add_subdirectory(Main)->add_subdirectory(main)
answered Sep 8, 2020 at 9:03
3
PackageManager: Installing tool-pyocd @ ~0.801.0
Downloading...
Unpacking...
tool-pyocd @ 0.801.0 has been successfully installed!
Processing LPC1768 (platform: https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/0.1.2.zip; framework: arduino; board: nxp_lpc1768)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nxplpc-arduino-lpc176x/nxp_lpc1768.html
PLATFORM: NXP Arduino LPC176x 0.1.1 > NXP LPC1768
HARDWARE: LPC1768 100MHz, 31.97KB RAM, 464KB Flash
DEBUG: Current (cmsis-dap) On-board (cmsis-dap) External (blackmagic, jlink)
PACKAGES: toolchain-gccarmnoneeabi 1.80201.190214 (8.2.1), framework-arduino-lpc176x 0.2.2
Converting Marlin.ino
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ off, Compatibility ~ strict
Found 6 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <Servo> 1.0.0
|-- <LiquidCrystal> 1.0.0
|-- <U8glib-HAL> 0.4.1
|-- <TMCStepper> 0.5.2
|-- <Adafruit NeoPixel> 1.3.0
|-- <SailfishLCD>
Building in debug mode
Unable to find destination disk (Autodetect Error)
Please select it in platformio.ini using the upload_port keyword (https://docs.platformio.org/en/latest/projectconf/section_env_upload.html) or copy the firmware (.pio/build/LPC1768/firmware.bin) manually to the appropriate disk
Compiling .piobuildLPC1768srcsrcHALHAL_LPC1768DebugMonitor.cpp.o
Compiling .piobuildLPC1768srcsrcHALHAL_LPC1768HAL.cpp.o
Compiling .piobuildLPC1768srcsrcHALHAL_LPC1768HAL_SPI.cpp.o
In file included from c:usersdandesktoptempmarlinsrcincMarlinConfigPre.h:54,
from c:usersdandesktoptempmarlinsrcincmarlinconfig.h:28,
from MarlinsrcHALHAL_LPC1768../../core/serial.h:24,
from MarlinsrcHALHAL_LPC1768DebugMonitor.cpp:26:
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2058:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(Z4)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2108:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E6)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2115:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E7)
^~~~~~~~~~~
Compiling .piobuildLPC1768srcsrcHALHAL_LPC1768MarlinSerial.cpp.o
Compiling .piobuildLPC1768srcsrcHALHAL_LPC1768fast_pwm.cpp.o
In file included from MarlinsrcHALHAL_LPC1768../../inc/MarlinConfigPre.h:54,
from MarlinsrcHALHAL_LPC1768../../inc/MarlinConfig.h:28,
from MarlinsrcHALHAL_LPC1768HAL.cpp:25:
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2058:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(Z4)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2108:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E6)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2115:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E7)
^~~~~~~~~~~
Compiling .piobuildLPC1768srcsrcHALHAL_LPC1768includedigipot_mcp4451_I2C_routines.c.o
Compiling .piobuildLPC1768srcsrcHALHAL_LPC1768main.cpp.o
In file included from MarlinsrcHALHAL_LPC1768../../inc/MarlinConfigPre.h:54,
from MarlinsrcHALHAL_LPC1768../../inc/MarlinConfig.h:28,
from MarlinsrcHALHAL_LPC1768HAL_SPI.cpp:51:
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2058:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(Z4)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2108:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E6)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2115:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E7)
^~~~~~~~~~~
In file included from MarlinsrcHALHAL_LPC1768../../inc/MarlinConfigPre.h:54,
from MarlinsrcHALHAL_LPC1768MarlinSerial.cpp:25:
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2058:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(Z4)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2108:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E6)
^~~~~~~~~~~
c:usersdandesktoptempmarlinsrccoredrivers.h:68:51: error: missing binary operator before token "("
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
^
c:usersdandesktoptempmarlinsrccoredrivers.h:91:31: note: in expansion of macro 'AXIS_DRIVER_TYPE'
#define AXIS_IS_TMC(A) ( AXIS_DRIVER_TYPE(A,TMC2130)
^~~~~~~~~~~~~~~~
c:usersdandesktoptempmarlinconfiguration_adv.h:2115:7: note: in expansion of macro 'AXIS_IS_TMC'
#if AXIS_IS_TMC(E7)
^~~~~~~~~~~
*** [.piobuildLPC1768srcsrcHALHAL_LPC1768MarlinSerial.cpp.o] Error 1
*** [.piobuildLPC1768srcsrcHALHAL_LPC1768DebugMonitor.cpp.o] Error 1
*** [.piobuildLPC1768srcsrcHALHAL_LPC1768HAL.cpp.o] Error 1
*** [.piobuildLPC1768srcsrcHALHAL_LPC1768HAL_SPI.cpp.o] Error 1
*** [.piobuildLPC1768srcsrcHALHAL_LPC1768persistent_store_flash.cpp.o] Error 1
*** [.piobuildLPC1768srcsrcHALHAL_LPC1768main.cpp.o] Error 1
========================== [FAILED] Took 2.42 seconds ==========================
Environment Status Duration
------------------------------ -------- ------------
megaatmega2560 IGNORED
megaatmega1280 IGNORED
at90usb1286_cdc IGNORED
at90usb1286_dfu IGNORED
DUE IGNORED
DUE_USB IGNORED
DUE_debug IGNORED
LPC1768 FAILED 00:00:02.424
LPC1769 IGNORED
sanguino_atmega644p IGNORED
sanguino_atmega1284p IGNORED
melzi IGNORED
melzi_optiboot IGNORED
rambo IGNORED
STM32F103RE IGNORED
STM32F103RC_fysetc IGNORED
STM32F103RC_bigtree IGNORED
STM32F103RC_bigtree_NOUSB IGNORED
STM32F103RC_bigtree_512K IGNORED
STM32F103RC_bigtree_512K_NOUSB IGNORED
STM32F103RE_bigtree IGNORED
STM32F103RE_bigtree_NOUSB IGNORED
STM32F4 IGNORED
STM32F7 IGNORED
ARMED IGNORED
STM32F103VE_longer IGNORED
mks_robin IGNORED
mks_robin_lite IGNORED
mks_robin_mini IGNORED
mks_robin_nano IGNORED
jgaurora_a5s_a1 IGNORED
STM32F407VE_black IGNORED
BIGTREE_SKR_PRO IGNORED
BIGTREE_BTT002 IGNORED
teensy31 IGNORED
STM32F103CB_malyan IGNORED
chitu_f103 IGNORED
teensy35 IGNORED
esp32 IGNORED
fysetc_f6_13 IGNORED
linux_native IGNORED
SAMD51_grandcentral_m4 IGNORED
include_tree IGNORED
==================== 1 failed, 0 succeeded in 00:00:02.424 ====================
I am currently trying to install PySift inside a virtualenv on Mac. However, the Zstandard library results in an error when being installed.
In file included from /usr/include/Availability.h:236:0,
from /usr/include/stdlib.h:61,
from zstd/lib/compress/fse_compress.c:38:
/usr/include/AvailabilityInternal.h:33:18: error: missing binary operator before token "("
#if __has_include(<AvailabilityInternalPrivate.h>)
^
In file included from /usr/include/stdlib.h:61:0,
from zstd/lib/compress/fse_compress.c:38:
/usr/include/Availability.h:497:18: error: missing binary operator before token "("
#if __has_include(<AvailabilityProhibitedInternal.h>)
^
error: command 'gcc' failed with exit status 1
Most of the solutions I’ve seen on Stack Overflow usually suggest running xcode-select --install
, but it did not work. Alternatively, this post suggests to use the following command
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
The command will open up a window that allows you to install the missing MacOS SDK. Yet, it still didn’t work. After that, I realized I have not updated Xcode to the latest version. But even after updating, the error still appears. Lastly, I tried to use brew
, like in this post, and do some updating in case there was some corrupted software that prevented the installation to be completed.
I’ve also checked this post, and didn’t find my answer because I was specifically trying to find out why __has_include
before (
resulted in an error.
In the end, it still did not work. I wonder if somebody can me point to what I was missing that caused the error?
Форум РадиоКот :: Просмотр темы — Проблема макросов в классах.
Автор: | Pink-Pank [ Чт дек 18, 2014 08:42:24 ] |
Заголовок сообщения: | Проблема макросов в классах. |
Всем добрый день! Частенько использую макросы для автоматизированного расчета загружаемых в регистры значений. Например: Код: #define F_CPU 1200000UL OCR0 = LOAD_VALUE; // 8 — предделитель таймера. Режим CTC В общем, если использую подобные макросы при работе с регистрами напрямую или передавая значение функции, то все ОК. И еще. Если я функции класса передаю не переменные, а числовые константы, можно как-то компилятор заставить, чтобы функция не принимала значения через стек (или регистры), а генерировалась инлайном с подстановкой нужных значений, не качая их из стека? Это с учетом того, что она в классе и простой инлайн не катит, но вызывается при этом всего один раз. |
Автор: | ploop [ Чт дек 18, 2014 09:34:27 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
У вас точка с запятой в макросе. Pink-Pank писал(а): Я так предполагаю, что препроцессор сначала подставляет выражение из макроса, а уже потом его рассчитывает Именно так. Pink-Pank писал(а): Если я функции класса передаю не переменные, а числовые константы, можно как-то компилятор заставить, чтобы функция не принимала значения через стек (или регистры), а генерировалась инлайном с подстановкой нужных значений, не качая их из стека? Нет. Функция есть функция, это машинный код в итоге. Препроцессор не сможет запустить её на исполнение в результате компиляции и оставить только результат, так как неизвестно, что там внутри функции вы наворотили. Цитата: то с учетом того, что она в классе и простой инлайн не катит, но вызывается при этом всего один раз. С чего это не может быть инлайновых методов? Вполне могут. |
Автор: | Pink-Pank [ Чт дек 18, 2014 09:54:36 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
В макросе у меня нет точек с запятой. Это я просто здесь «намешал» код и макросы. Щас поправлю. Цитата: С чего это не может быть инлайновых методов? Вполне могут. Не знаю. При попытке оформить метод как инлайн компилятор материться, что функция из класса не может вызываться, как инлайная. Думаю, проблема в области видимости внутренних функций классов или что-то в этом духе.. Ведь если сделать два разных объявления классов с одинаковым набором внутренних переменных, потом создать эти два класса и попытаться присвоить значения одного класса другому, то компиль также выдаст ошибку. Думаю, здесь что-то подобное.. |
Автор: | ploop [ Чт дек 18, 2014 10:10:36 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Думаю, вы что-то намутили… Pink-Pank писал(а): Ведь если сделать два разных объявления классов с одинаковым набором внутренних переменных, потом создать эти два класса и попытаться присвоить значения одного класса другому, то компиль также выдаст ошибку. Думаю, здесь что-то подобное.. Как вы это делаете? Ничего не понял, покажите пример. |
Автор: | Pink-Pank [ Чт дек 18, 2014 10:17:32 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Методы.. Шметоды.. Это все условности! ))) Главное — полет мысли! )))))) Код: class First { class Second { class First obj1; Да и как я мог намутить, если передача обычного числа, макроса или переменной прокатывает, а макрос с преобразованием типов вызывает ошибку? |
Автор: | ploop [ Чт дек 18, 2014 10:46:29 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Pink-Pank писал(а): // ошибка: obj1 и obj2 имеют разные типы Естественно! Первый имеет тип First, второй — Second. А если они внутри одинаковы — так это ваша проблема, так как такой подход рвёт все шаблоны ООП. Pink-Pank писал(а): А если выражение (uint16_t)((double)F_CPU/16), то получается облом… Ошибка то хоть какая? |
Автор: | Pink-Pank [ Чт дек 18, 2014 10:52:31 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
я ж писал |
Автор: | Siarzhuk [ Чт дек 18, 2014 11:28:52 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Pink-Pank писал(а): А вот если в макросе есть приведение типа переменной, то компилятор начинает материться, что: С какой проблемой? Где кот с классами? Телепатам гадать не на чем. При непонятных проблемах с макросами нужно включать опцию -F Preprocess only результат работы препроцессора будет сохранен в файле с расширением *.i а компиляция не будет производиться. При нормальной компиляции этот вот *.i и скармливается компилятору. Обычно достаточно одного взгляда на развёрнутый макрос чтобы понять в чём проблема. Для inline попробуйте определить тело функции прямо v определении класса в h файле. А вообще нужно читать мануал на компилятор соответствующую тему — там наверняка оговариваются нюансы использования. Pink-Pank писал(а): Да и как я мог намутить, Мутят все, мутили и будут мутить всегда и вовеки — чем вы лучше других? Как и во всяком ремесле опыт решает — другие просто эти шишки уже собрали на свои головы пока вы прохлаждались — вот и всё. Pink-Pank писал(а): // ошибка: obj1 и obj2 имеют разные типы Определите операторы присваивания и будет вам счастье. Это нужно делать даже для одинаковых типов если они имеют ссылки на внешние ресурсы — по умолчанию компилятор создает оператор присваивания с простым копированием данных если оператор=(…) для этого типа не задан прокладкой между стулом и клавиатурой. |
Автор: | Pink-Pank [ Чт дек 18, 2014 11:51:51 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Цитата: Для inline попробуйте определить тело функции прямо v определении класса в h файле. А вообще нужно читать мануал на компилятор соответствующую тему — там наверняка оговариваются нюансы использования. Уже пробовал.. Не помогает.. Цитата: С какой проблемой? Где кот с классами? Да что Вам мой кот, если компилятор глотает обычные числовые значения и макросы без преобразования типов. Цитата: Определите операторы присваивания и будет вам счастье. поподробнее можно? Что-то я не очень понял, о чем Вы? Вы про перегрузку операторов? Цитата: -F Preprocess only не -F, а -E |
Автор: | Siarzhuk [ Чт дек 18, 2014 12:13:54 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Pink-Pank писал(а): Цитата: С какой проблемой? Где кот с классами? Да что Вам мой кот, если компилятор глотает обычные числовые значения и макросы без преобразования типов. А без кота разговор беспредметен. Ну глотает, и чо? А вот нужные вам макросы не глотает. Не переваривает стало-быть их. Несъедобно готовите раз котейко давится. Скобок туда по уму добавьте — сожрёць как миленький — и не такое сжирал. И ещё раз про *.i выхлоп напоминаю — дюже важный доку́мент для пущего понимания процессов «прокладкой». |
Автор: | Siarzhuk [ Чт дек 18, 2014 12:22:04 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Pink-Pank писал(а): Вы про перегрузку операторов? да, они, что-то типа Код: Second* Second::operator=(const First& first) { Pink-Pank писал(а): Цитата: -F Preprocess only не -F, а -E Ну может и не -F и не *.i — вам на месте виднее — гляньте в папках где временные файлы/результаты компиляции — может какие *.pre или что-то в этом роде сохраняется — а сообщение означает что линкер не нашёл чего хотел — т.е. как-бы понятно почему — объектников-то ведь нету — один препроцессор. удачи. |
Автор: | Pink-Pank [ Чт дек 18, 2014 12:25:57 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Цитата: Несъедобно готовите раз котейко давится. Скобок туда по уму добавьте — сожрёць как миленький — и не такое сжирал. Видно, скобочками и давится — потому что у меня их как раз валом! А как Вам тот факт, что тот же макрос обычной функцией принимается без проблем? Вот Вам мой класс *.h Вот мой класс *.cpp Вот моя функция с вызовом и подстановкой макроса: |
Автор: | Siarzhuk [ Чт дек 18, 2014 12:36:37 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Pink-Pank писал(а): Цитата: Несъедобно готовите раз котейко давится. Скобок туда по уму добавьте — сожрёць как миленький — и не такое сжирал. Видно, как раз скобочками и давится — потому что у меня их как раз валом! А как Вам тот факт, что тот же макрос обычной функцией принимается без проблем? Ничего удивительного — даже если макрос не огорожен скобками — результат исчисления по любому уйдёт в функцию, а вот неогороженный макрос в выражении имеет все шансы быть растащенным в стороны операциями с более высоким приоритетом. Типовая ошибка — потому в любом букваре по сишному препроцессору есть соответствующие примеры и страшилки. |
Автор: | ploop [ Чт дек 18, 2014 14:02:46 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
У вас проблема точно в макросе? Раз ругается на битовую операцию, значит может быть в структуре Work_regim_Def, что после него идёт? Вы кажется намутили с областью видимости индентификатора UART |
Автор: | Pink-Pank [ Чт дек 18, 2014 14:42:32 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
то, что идет после никакого отношения к ошибке не имеет. Я те параметры пробовал и вовсе комментировать, оставлял только один, который не робит. Не помогло. Перечисления я там сделал, чтобы вводимые значения в качестве параметров были фиксированными. Чтобы пользователь класса не мог запулить туда что-то не удобоваримое. Да и при нажатии на ошибку выкидывает именно на макрос. Попробую в IAR загнать.. если схавает — значит студия ка-ка. Если нет и с такой же ошибкой — значит ка-ка я! |
Автор: | Siarzhuk [ Чт дек 18, 2014 17:07:33 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Pink-Pank писал(а): А функция round точно видна и не перекрывается переменной с таким именем? Да и %s/BOAD/BAUD/g надо бы сделать. |
Автор: | Pink-Pank [ Пт дек 19, 2014 07:33:56 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Видна. У меня нет таких переменных. |
Автор: | Аlex [ Пт дек 19, 2014 07:57:40 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
А если её (round) для пробы выкинуть из макроса, проглотит ? |
Автор: | Siarzhuk [ Пт дек 19, 2014 10:55:49 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Pink-Pank писал(а): Видна. У меня нет таких переменных. Т.е. если написать пару строками раньше что-то типа double d = round(2342.346456); компилятор скушает и не ругнётся? ну разбивайте макрос по операциям на разных строчках с промежуточными результатами и смотрите на какой чертыхнётся если лень выхлоп препроцессора искать и времени не жалко. В порядке постукивания по бубну оберните всю подстановку в скобки. Или воспользуйтесь конструкторо-подобной нотацией оператора приведения: Код: #define UBRR uint16_t( round( double(F_CPU) / 16.0 / BOAD_RATE ) — 1) |
Автор: | BCluster [ Пт дек 19, 2014 12:37:19 ] |
Заголовок сообщения: | Re: Проблема макросов в классах. |
Проверил в IAR ARM такую конструкцию, она работает |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
Всем доброго времени суток!
Загорелся желанием сделать Dondolo и в процессе наткнулся на такой ‘камень’.
При залитии впрошивки Marlin Kimbra в Arduino + Ramps пишет, что, мол ‘ошибка компиляции’ (Если вам не трудно можете рассказать из-за чего она вообще случается и что это. Плюсик с моей стороны))
Использую Arduino 1.6.5. т.к. прочитал, что она самая стабильная на последней версии тоже трабл выпозал, но какой-то другой (Если необходимо для решения проблемы, то кину в коменты)
Скетч генерировал через конфигуратор на сайте Marlin Kimbra
Весь код ошибки выглядит так:
Arduino: 1.6.5 (Windows 8.1), Плата’Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)’
Изменена опция сборки, пересобираем все
In file included from MK4duo.ino:251:0:
base.h:41:24: fatal error: src/macros.h: No such file or directory
#include ‘src/macros.h’
^
compilation terminated.
Ошибка компиляции.
Прошу самых умных не глумиться над новичками, а помочь понять как это решить и получить свой плюсик
в карму.
Премногобагодарен всем кто откликнется!