类内if-else语句中需要的澄清
clarification needed in if else statement inside a class
这是一个openfoam程序,我对它做了一些更改。在编译时,我遇到了以下错误
phaseModel/lnInclude/phaseModel.H:61:2: error: expected unqualified-id before ‘if’
if (strcmp(word name_, "phase1") == 0)
^
phaseModel/lnInclude/phaseModel.H:75:1: error: expected unqualified-id before ‘else’
else
^
phaseModel/lnInclude/phaseModel.H:136:1: error: expected unqualified-id before ‘if’
if (strcmp(phaseName, "phase1") == 0)
^
我的主要需求是,如果阶段名称是阶段1,它应该占用某些属性集。对于其他人,它应该采用另一组属性。我是初学者,如果犯了错误一定要纠正我。
namespace Foam
{
class phaseModel
{
// Private data
dictionary dict_;
//- Name of phase
word name_;
if (strcmp(word name_, "phase1") == 0)
{
//- Velocity
volVectorField U_;
dimensionedScalar lambda_;
dimensionedScalar cp_;
dimensionedScalar T_;
dimensionedScalar h_;
dimensionedScalar beta_;
}
else
{
//- Characteristic diameter of phase
dimensionedScalar d_;
//- kinematic viscosity
dimensionedScalar nu_;
//- density
dimensionedScalar rho_;
//- Velocity
volVectorField U_;
dimensionedScalar lambda_;
dimensionedScalar cp_;
dimensionedScalar T_;
dimensionedScalar h_;
dimensionedScalar beta_;
//- Fluxes
autoPtr<surfaceScalarField> phiPtr_;
}
public:
// Constructors
phaseModel
(
const fvMesh& mesh,
const dictionary& transportProperties,
const word& phaseName
);
// Selectors
//- Return a reference to the selected turbulence model
static autoPtr<phaseModel> New
(
const fvMesh& mesh,
const dictionary& transportProperties,
const word& phaseName
);
//- Destructor
virtual ~phaseModel();
// Member Functions
const word& name() const
{
return name_;
}
if (strcmp(phaseName, "phase1") == 0)
{
const dimensionedScalar& T() const
{
return T_;
}
const dimensionedScalar& lambda() const
{
return lambda_;
}
const dimensionedScalar& h() const
{
return h_;
}
const dimensionedScalar& cp() const
{
return cp_;
}
const dimensionedScalar& beta() const
{
return beta_;
}
const volVectorField& U() const
{
return U_;
}
volVectorField& U()
{
return U_;
}
}
else
{
const dimensionedScalar& d() const
{
return d_;
}
const dimensionedScalar& T() const
{
return T_;
}
const dimensionedScalar& lambda() const
{
return lambda_;
}
const dimensionedScalar& h() const
{
return h_;
}
const dimensionedScalar& cp() const
{
return cp_;
}
const dimensionedScalar& beta() const
{
return beta_;
}
const dimensionedScalar& nu() const
{
return nu_;
}
const dimensionedScalar& rho() const
{
return rho_;
}
const volVectorField& U() const
{
return U_;
}
volVectorField& U()
{
return U_;
}
const surfaceScalarField& phi() const
{
return phiPtr_();
}
surfaceScalarField& phi()
{
return phiPtr_();
}
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
要解决这个问题,您将(可能,因为问题中没有100%明确确切的问题)需要声明从同一基类派生的两个类,并使用虚拟函数来定义成员函数。然后使用工厂函数来确定_name
包含的内容,并创建具有该功能的正确类。
或者将if (strcmp(...) ... )
添加到每个函数中,但这几乎肯定是一个更糟糕的解决方案。基类可以包含所有"公共"功能和在两个变体之间不变的公共成员。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- C++ If/Else 语句被跳过
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 如何将 if else 语句重写为 switch 语句
- 在 C++ 中的 if-else if- else 语句期间更改变量
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 为什么无论输入如何,所有 if-else 语句都会打印?
- 为什么切换 if else 语句的顺序会导致错误?
- 如何使用 if else 语句
- if/else 语句输出由于加号或减号而未显示正确的消息
- if-else 语句仅按特定顺序工作,我不知道为什么
- 试图避免在 for 循环中出现 if-else 语句,但代码似乎有一些错误
- 如何在 if-else 语句中使用 C++20 的可能/不太可能属性
- While循环和if/else语句工作不正常
- 我的fahrenheit-celcius程序会忽略我的if-else语句,并在每次运行该程序时将值更改为0
- 我怎样才能接受输入作为双精度值并执行 IF ELSE 语句
- if-else 语句返回相同的反馈
- C++ 使用 OpenMP 时,如果 for 循环在 if else 语句中出错
- "If Else"语句缩进在C++中是否重要?