次のコードのヘッダーには、ヘッダー ファイル /usr/include/sys/param.h の CROUND の定義に起因する不可解なエラーがあり、コード自体にもコマンド ライン パラメーターにも含まれていません。
#ifndef _PARSERTYPES_H_
#define _PARSERTYPES_H_
#ifdef CROUND
#warning #undef CROUND applied, defined in /usr/include/sys/param.h
#undef CROUND
#endif // CROUND
enum TokType
{
FLOATING, INTEGER, STRING, SYMBOL,
OCURLY, CCURLY, OROUND, CROUND, OSQUARE, CSQUARE,
};
#endif // _PARSERTYPES_H_
簡易化された clang (c++) または gcc (g++) コンパイラ コマンドでコンパイル:
cd /path/to/build3/modules/device/examples/sweep && /usr/bin/g++ -DQT_OPENGL_LIB -DQT_DESIGNER_LIB -DQT_GUI_LIB -DQT_SQL_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -D__DC1394__ - -DQT_NO_DEBUG -O3 -DNDEBUG -I/path/to/modules//. -I/opt/local/include -I/opt/local/include/opencv -I/usr/local/include -I/opt/local/include/QtOpenGL -I/opt/local/include/QtDesigner -I/opt/local/include/QtGui -I/opt/local/include/QtSql -I/opt/local/include/QtNetwork -I/opt/local/include/QtCore -I/Library/Frameworks/FreeType.framework/Headers -F/Library/Frameworks -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include/gdk-pixbuf-2.0 -I/opt/local/include/gtk-2.0 -I/opt/local/lib/gtk-2.0/include -I/Library/Frameworks/cairo.framework/Headers -I/opt/local/include/pango-1.0 -I/opt/local/include/atk-1.0 -o CMakeFiles/Example.dir/Example.cpp.o -c /path/to/modules/Example.cpp
これにより、次の (clang) エラーが生成されます。
In file included from /path/to/parser/parser.h:69:
path/to/parser/parserTypes.h:58:26: error: expected '}'
OCURLY, CCURLY, OROUND, CROUND, OSQUARE, CSQUARE,
^
/usr/include/sys/param.h:171:16: note: expanded from macro 'CROUND'
#define CROUND (CBLOCK - 1) /* Clist rounding. */
^
/path/to/parser/parserTypes.h:56:1: note: to match this '{'
{
#undef CROUND で問題を回避できましたが、明らかにこれは非常に一時的な解決策です。
この問題の原因と適切な解決策は何ですか?