0

我正在研究 C++ 框架 OpenFOAM,尤其是在一个项目的库上。我无法按照我想要的方式声明我的类的构造函数。从 C++ 的角度来看,我认为我的问题很有趣。

这是我的构造函数(在 arbMesh.C 中):

    explicit arbMesh(volScalarField& Rho)
    :
    rho_(Rho),
    mesh_(Rho.mesh())
    {}

“Rho”是一个 volScalarField 引用,“mesh_”是一个 const fvMesh 引用。

我想要做的是添加另一个从“fvMesh”对象定义的“pointMesh”类型的属性。我的直接想法是将属性“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_;
      ...

这是第三个选项的编译错误:

    arbMesh.H.:97:11: error: expected primary-expression before 'const'
    pMesh_(const fvMesh mesh_)

如何声明 pMesh 以使其正确初始化?

如果您不熟悉它的类,请浏览OpenFOAM 的源代码。我无法在 c++ 论坛或 OF 社区中找到合适的答案。

4

0 回答 0