Я работаю над платформой C ++ OpenFOAM, особенно над библиотекой проекта. Мне не удается объявить конструктор моего класса так, как я хочу. Я думаю, что мой вопрос интересен с точки зрения C ++.
Вот мой конструктор (в arbMesh.C):
explicit arbMesh(volScalarField& Rho)
:
rho_(Rho),
mesh_(Rho.mesh())
{}
«Rho» - это ссылка на volScalarField, «mesh_» - это постоянная ссылка на fvMesh.
Что я хочу сделать, это добавить еще один атрибут типа "pointMesh", который определен из объекта "fvMesh". Моя прямая идея состояла в том, чтобы добавить атрибут «const pointMesh & pMesh» к классу arbMesh, и тогда выше было изменено на:
explicit arbMesh(volScalarField& Rho)
:
rho_(Rho),
mesh_(Rho.mesh()),
pMesh_(pointMesh::New(Rho.mesh()))
{}
или
explicit arbMesh(volScalarField& Rho)
:
rho_(Rho),
mesh_(Rho.mesh()),
pMesh_(pointMesh::New(mesh_))
{}
или
explicit arbMesh(volScalarField& Rho)
:
rho_(Rho),
mesh_(Rho.mesh()),
pMesh_(const fvMesh& mesh_)
{}
Очевидно, что ни одно из этих решений не работает, но я думаю, что приближаюсь. Проблема в том, что инициализация не выполнена правильно. На самом деле я помню, что это ссылки, они должны быть объявлены как:
class arbMesh
{
volScalarField& rho_;
const fvMesh& mesh_;
const pointMesh& pMesh_;
...
Вот ошибка компиляции для 3-го варианта:
arbMesh.H.:97:11: error: expected primary-expression before 'const'
pMesh_(const fvMesh mesh_)
Как мне объявить pMesh, чтобы он правильно инициализировался?
Пожалуйста, просмотрите исходный код OpenFOAM , если вы не знакомы с его классами.
Я не смог найти подходящего ответа ни на форумах c ++, ни в сообществе OF.