openfoam: flex yyin.rdbuf(ошибка std::cin.rdbuf()

Я хочу сообщить об устранении ошибки, полученной при установке OpenFOAM 3.0.1 в Mac OS X El Capitan версии 10.11.2 Ошибка:

"ошибка: тип ссылки на член 'std::istream *' (он же basic_istream *') является указателем; возможно, вы намеревались использовать'->'? yyin.rdbuf(std::cin.rdbuf());"

Эта проблема связана с flex version 2.6.0, который я установил, используя macports.

Я мог бы преодолеть проблему с помощью "flex 2.5.35 Apple(flex-31)"который находится в /usr/bin/flex (вместо /opt/local/flex).

Просто замените "flex" на "/usr/bin/flex" в файле $(WM_DIR)/rules/General/flex++ вашего исходного кода openfoam.

2 ответа

Я думаю, что это может быть немного запоздалым ответом, но я считаю, что проблема связана с несинхронизацией "FlexLexer.h". Flex 2.6.0 изменил определение хранилища yyin для сканеров C++ как для заголовка, так и для сгенерированного источника. Однако я полагаю, что пакет портов Mac включает в себя устаревший FlexLexer.h, хотя сам Flex был обновлен. Это приводит к несоответствию, которое вы видите как ошибки компиляции.

Вместо понижения вашей гибкой установки, вы можете просто использовать более новый "FlexLexer.h" (например, здесь: https://github.com/westes/flex/blob/master/src/FlexLexer.h)

Я только что скомпилировал OpenFOAM v6 из исходного кода и получил ту же ошибку - так что эта проблема все еще актуальна. Ошибка возникла в wmake surfmesh где первая ошибка была как то так

flex -+ ..........  
.../OpenFOAM/OpenFOAM- 6/platforms/linux64GccDPInt32Opt/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L.C: In member function ‘int STLASCIILexer::lex()’:  
.../OpenFOAM/OpenFOAM-6/platforms/linux64GccDPInt32Opt/src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L.C:5494:9: error: request for member ‘rdbuf’ in ‘((STLASCIILexer*)this)->STLASCIILexer::<anonymous>.yyFlexLexer::yyin’, which is of pointer type ‘std::istream* {aka std::basic_istream<char>*}’ (maybe you meant to use ‘->’ ?)
yyin.rdbuf(std::cin.rdbuf());

Решение, предоставляемое путем изменения flex в /usr/bin/flex в $HOME/OpenFOAM/OpenFOAM-6/wmake/rules/General/flex++ сработало для меня.

Спасибо. С уважением, Миккель.

Другие вопросы по тегам