错误: 无法分配抽象类型的对象
error: cannot allocate an object of abstract type
尽管我想为这个问题创建一个 MVCE...我真的不能。我正在使用一个名为 Palabos 的开源流体流动求解器,其开发指南也可用。它基于通用结构和 mpi。可能是同类中最好的开源求解器
那里的开发人员使用 Box 处理器在数组中循环(一般来说......它可以是张量,格是其他对象)。这是他们将处理器用于单个晶格外壳的一种方法
struct IniTemperatureRayleighBenardProcessor2D :
public BoxProcessingFunctional2D_L<T,adDescriptor>
{
IniTemperatureRayleighBenardProcessor2D(RayleighBenardFlowParam<T,nsDescriptor,adDescriptor> parameters_)
: parameters(parameters_)
{ }
virtual void process(Box2D domain, BlockLattice2D<T,adDescriptor>& adLattice)
{
Dot2D absoluteOffset = adLattice.getLocation();
Array<T,adDescriptor<T>::d> jEq(0.0, 0.0);
for (plint iX=domain.x0; iX<=domain.x1; ++iX) {
for (plint iY=domain.y0; iY<=domain.y1; ++iY) {
//some operations...............
}
}
}
virtual IniTemperatureRayleighBenardProcessor2D<T,nsDescriptor,adDescriptor>* clone() const
{
return new IniTemperatureRayleighBenardProcessor2D<T,nsDescriptor,adDescriptor>(*this);
}
virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const {
modified[0] = modif::staticVariables;
}
virtual BlockDomain::DomainT appliesTo() const {
return BlockDomain::bulkAndEnvelope;
}
private :
RayleighBenardFlowParam<T,nsDescriptor,adDescriptor> parameters;
};
这是他们如何称呼它
applyProcessingFunctional (
new IniTemperatureRayleighBenardProcessor2D<T,NSDESCRIPTOR,ADESCRIPTOR>(parameters), adLattice.getBoundingBox(),
adLattice );
整个过程的详细信息见(http://www.palabos.org/documentation/userguide/data-processors.html)
相关源代码位于 (http://www.palabos.org/documentation/develguide/dataProcessingFunctional2D_8h_source.html)
现在,这是我的问题。我正在使用类似的数据处理器在两个标量数组上执行操作。试图尽可能多地理解源代码
template<typename T1, typename T2>
//template<typename T, template<typename NSU> class nsDescriptor,
// template<typename ADU> class adDescriptor, typename T1, typename T2>
struct IniFluxMultiplier2D :
public BoxProcessingFunctional2D_SS<T,T>
{
IniFluxMultiplier2D(RayleighBenardFlowParam<T,NSDESCRIPTOR,ADESCRIPTOR> parameters_)
: parameters(parameters_)
{ }
virtual void process(Box2D domain,
MultiScalarField2D<bool>& boolMask,
MultiScalarField2D<T> &FluxMultiplier)
{
//Dot2D absoluteOffset = adLattice.getLocation();
//Array<T,adDescriptor<T>::d> jEq(0.0, 0.0);
for (plint iX=domain.x0; iX<=domain.x1; ++iX) {
for (plint iY=domain.y0; iY<=domain.y1; ++iY) {
//plint absoluteX = absoluteOffset.x + iX;
//plint absoluteY = absoluteOffset.y + iY;
bool solidblock = boolMask.get(iX,iY);
if(solidblock== true){
FluxMultiplier.get(iX,iY)=(parameters.getTemperatureTau()-(T)0.5)/parameters.getTemperatureTau();}
else{
FluxMultiplier.get(iX,iY)=(parameters.getSolventTau()-(T)0.5)/parameters.getSolventTau();}
}
}
}
virtual IniFluxMultiplier2D<T1,T2>* clone() const
{
return new IniFluxMultiplier2D<T1,T2>(*this);
}
virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const {
modified[0] = modif::staticVariables;
}
virtual BlockDomain::DomainT appliesTo() const {
return BlockDomain::bulkAndEnvelope;
}
private :
RayleighBenardFlowParam<T,NSDESCRIPTOR,ADESCRIPTOR> parameters;
};
这是我怎么称呼它的
applyProcessingFunctional (
new IniFluxMultiplier2D<T,T>(parameters), boolMask.getBoundingBox(), boolMask,FluxMultiplier);
我收到错误
error: cannot allocate an object of abstract type ‘IniFluxMultiplier2D<double, double>’|
尝试调试它,但我被卡住了,真的找不到出路。我真的不希望有人运行这个,但我知道我在结构开始时犯了一个概念上的错误,我无法真正弄清楚。
T 被十进制为
typedef double T;
全球
process()
的签名是
virtual void process (Box2D domain, ScalarField2D< T1 > &field1, ScalarField2D< T2 > &field2)=0
但是您正在传递MultiScalarField2D<T>&
并且似乎没有可用的转换为ScalareField2d<T>&
.因此,您已经定义了一个新的虚函数,并且没有覆盖基中的函数。在这些情况下,使用 override
关键字会有所帮助。
相关文章:
- E0322:不允许使用抽象类类型 " " 的对象
- 分配抽象类类型 c++ xcode 的对象
- 分配抽象类类型为"CObject"的对象
- 错误消息:不允许抽象类类型 "X" 的对象:纯虚拟"Y"没有覆盖器
- 错误:不允许使用抽象类类型的对象
- 我在代码中有一个错误,错误是:(智能感知:不允许抽象类类型"HourlyWorker"的对象:)
- OOP - 抽象类类型,初始化基类和派生类中的变量
- 创建一个抽象类类型的集合,shared_ptr的抽象类向量
- 意外地'instantiate'使用大括号初始值设定项的抽象类类型?
- C++错误:不允许使用抽象类类型的对象
- 使用 std::vector 时抽象类类型"Shape"的新表达式无效错误
- 提升::可选抽象类类型
- 不允许抽象类类型的对象 "Vector<LinkedList<int>>"
- 在我的代码中分配抽象类类型的对象
- 使用抽象类类型的 c++ 传递对象会给出错误:不是 GeneralDriverInterface 的成员
- 分配抽象类类型的对象
- 在尝试创建SceneNode时分配抽象类类型的对象
- 分配抽象类类型为"形状"的对象?
- 不允许抽象类类型 "DiamondMap" 的对象
- 抽象类类型.是不允许的,纯虚函数是不重写的