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

Я хочу сообщить о решении ошибки, которую я получил при установке OpenFOAM 3.0.1 в Mac OS X El Capitan Version 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.


person Murilo Pereira de Almeida    schedule 23.12.2015    source источник
comment
Я ничего не знаю об этой версии flex, но кажется, что yyin — это указатель. Попробуйте использовать yyin->rdbuf(std::cin.rdbuf());.   -  person Dietmar Kühl    schedule 23.12.2015
comment
В stackoverflow отвечать на собственный вопрос рекомендуется, при условии, что вы притворяетесь, что находитесь в опасности! — сформулируйте это в форме вопроса.   -  person YSC    schedule 23.12.2015
comment
Действительно, было бы более эффективно сообщить об ошибке OpenFOAM напрямую; что может помочь решить проблему. Вполне возможно, что этот вопрос может помочь некоторым потенциальным пользователям openfoam, которые могут найти StackOverflow для своей проблемы, но, вероятно, есть много потенциальных пользователей, которые пропустят его.   -  person rici    schedule 23.12.2015
comment
Большое спасибо, это помогло! (кстати, не для OpenFOAM. У меня были проблемы с совершенно не связанным пакетом)   -  person Ctx    schedule 04.12.2016
comment
при установке OpenFOAM-7 те же проблемы, решенные с помощью 2.5.xx flex.   -  person ArtificiallyIntelligence    schedule 06.08.2019


Ответы (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)

person Alex H.    schedule 03.02.2017

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

person Mikkel K.Ø.    schedule 13.09.2018