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 (станд :: 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) / правила / Общие / прогибается ++
вашего исходного кода openfoam.

3

Решение

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

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

1

Другие решения

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

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

0

По вопросам рекламы [email protected]