我正在研究 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 社区中找到合适的答案。