gpt4 book ai didi

c++ - 包含来自另一个文件的函数会产生范围错误(openFoam)

转载 作者:行者123 更新时间:2023-11-30 04:58:05 24 4
gpt4 key购买 nike

这个问题是关于 openFoam (foam extend v4) C++ 但我相信我遇到的问题是一个基本的 C++ 编程问题。

我正在尝试使用函数autoCreateOmega,其原型(prototype)可以在

foam-extend-4.0/src/turbulenceModels/incompressible/RAS/lnInclude/backwardsCompatibilityWallFunctions.H,定义在相应的backwardsCompatibilityWallFunctions.C中。

在我的 solver.C 文件中,顶部有以下内容:

#include "fvCFD.H"
#include "simpleControl.H"
#include "wallDist.H"
#include "backwardsCompatibilityWallFunctions.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

int main(int argc, char *argv[])
{
# include "setRootCase.H"
# include "createTime.H"
# include "createMesh.H"

simpleControl simple(mesh);

# include "createFields.H"

我的 createFields.H 的一部分看起来像这样:

    Info<< "Reading field omega\n" << endl;


volScalarField omega
(
IOobject
(
"omega",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
//mesh
autoCreateOmega("omega", mesh, U.db())
);

当我尝试编译此求解器时,出现以下错误:

In file included from solver.C:48:0:
createFields.H: In function ‘int main(int, char**)’:
createFields.H:50:46: error: ‘autoCreateOmega’ was not declared in this scope
autoCreateOmega("omega", mesh, U.db())
^
createFields.H:50:46: note: suggested alternative:
In file included from solver.C:37:0:
/home/foam/foam-extend-4.0/src/turbulenceModels/incompressible/RAS/lnInclude/backwardsCompatibilityWallFunctions.H:98:25: note: ‘Foam::incompressible::autoCreateOmega’
tmp<volScalarField> autoCreateOmega
^
solver.dep:714: recipe for target 'Make/linux64GccDPOpt/solver.o' failed
make: *** [Make/linux64GccDPOpt/solver.o] Error 1

为什么不包含 "backwardsCompatibilityWallFunctions.H" 允许我在我的程序中使用 autoCreateOmega?非常感谢任何帮助。

如果需要更多信息,请告诉我。

编辑

“backwardsCompatibilityWallFunctions.H” 中:

#ifndef backwardsCompatibilityWallFunctions_H
#define backwardsCompatibilityWallFunctions_H

#include "fvMesh.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{
namespace incompressible
{


//- omega
tmp<volScalarField> autoCreateOmega
(
const word& fieldName,
const fvMesh& mesh,
const objectRegistry& obj
);

tmp<volScalarField> autoCreateOmega
(
const word& fieldName,
const fvMesh& mesh
);

并且在 "backwardsCompatibilityWallFunctions.C"

tmp<volScalarField> autoCreateOmega
(
const word& fieldName,
const fvMesh& mesh,
const objectRegistry& obj
)
{
return
autoCreateWallFunctionField
<
scalar,
RASModels::omegaWallFunctionFvPatchScalarField
>
(
fieldName,
mesh,
obj
);
}


tmp<volScalarField> autoCreateOmega
(
const word& fieldName,
const fvMesh& mesh
)
{
return
autoCreateWallFunctionField
<
scalar,
RASModels::omegaWallFunctionFvPatchScalarField
>
(
fieldName,
mesh,
mesh
);
}

按照建议:如果我添加 using Foam::incompressible::autoCreateOmega;

Make/linux64GccDPOpt/solver.o: In function `main':
solver.C:(.text.startup+0x7dd): undefined reference to `Foam::incompressible::autoCreateOmega(Foam::word const&, Foam::fvMesh const&, Foam::objectRegistry const&)'
collect2: error: ld returned 1 exit status
/home/foam/foam-extend-4.0/wmake/Makefile:159: recipe for target '/home/foam/applications/bin/linux64GccDPOpt/solver' failed
make: *** [/home/foam/applications/bin/linux64GccDPOpt/solver] Error 1

最佳答案

由于编译器通知了未声明的函数,而不是模棱两可的调用,最可能的原因是函数名位于某个命名空间中。我查看了扩展的 OpenSOAP 源代码并建议您在 main 之前插入 using Foam::incompressible::autoCreateOmega;

关于c++ - 包含来自另一个文件的函数会产生范围错误(openFoam),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com