Включение функции из другого файла дает ошибку области действия (openFoam)

Этот вопрос касается openFoam (PEE Extension V4) C ++, но я считаю, что проблема, которую я имею, является фундаментальной проблемой программирования на C ++.

Я пытаюсь использовать функцию autoCreateOmega чей прототип можно найти в

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

1

Решение

Поскольку компилятор сообщает о не объявленной функции, а не о неоднозначном вызове, наиболее вероятная причина заключается в том, что имя функции находится в некотором пространстве имен. Я посмотрел на расширенные источники OpenSOAP и предлагаю вам вставить using Foam::incompressible::autoCreateOmega; до main,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]