Инициализация ссылочного атрибута из другого атрибута того же класса вOpenFOAM - PullRequest
0 голосов
/ 10 мая 2019

Я работаю над платформой 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.

...