Библиотека OpenFOAM определяет два типа, volMesh
и surfaceMesh
, оба из которых наследуются от GeoMesh<fvMesh>
. Я хочу определить функцию, которая принимает аргумент:
void foo(GeometricField<vector, fvsPatchField, GeoMesh<fvMesh> >& field) { ... }
Однако g++ выдает ошибку «недопустимая инициализация ссылочного типа», когда я пытаюсь вызвать функцию:
// surfaceVectorField is a typedef GeometricField<vector, fvsPatchField, surfaceMesh>
surfaceVectorField Uf( /* initialisation arguments */ );
foo(Uf);
Исходя из фона Java, эта проблема кажется похожей на забывание использовать объявление, такое как
void foo(GeometricField<vector, fvsPatchField, ? extends GeoMesh<fvMesh>> field) { ... }
Мне нужно избегать функций, специфичных для C++11, если это возможно.
foo()
или определения переменнойUf
? stackoverflow.com/questions/9285627/ - person Richard Chambers   schedule 21.10.2014GeoMesh<fvMesh>
или всю конструкцию в ссылку на правильный сложный тип. - person Ashalynd   schedule 21.10.2014foo()
- person hertzsprung   schedule 21.10.2014GeoMesh<fvMesh>
при инициализации surfaceVectorField. - person Ashalynd   schedule 21.10.2014surfaceMesh
начинается так:class surfaceMesh : public GeoMesh<fvMesh>
- person hertzsprung   schedule 21.10.2014template <typename T> void foo(GeometricField<vector, fvsPatchField, T>& field) { ... }
- person cdhowie   schedule 21.10.2014const
, поскольку прототип функции неconst
? Другая недопустимая инициализация ссылки типа error или g++ выдает ошибку: недопустимая инициализация ссылки типа < /а> - person Richard Chambers   schedule 21.10.2014