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++
сработало для меня.
Спасибо. С уважением, Миккель.