我正在尝试用C++(对于OpenFOAM)编写一些代码,但是我得到了标题中的以下代码错误:
// Copy set
void backup
(
const polyMesh& mesh,
const word& fromName,
const topoSet& fromSet,
const word& toName
)
{
Info<< "Backing up " << fromName << " into " << toName << endl;
topoSet backupSet(mesh, toName, fromSet);
backupSet.write();
}
完整的错误是:
faceSet.C:51:18: error: cannot declare variable ‘backupSet’ to be of abstract type ‘Foam::topoSet’
错误在这一行:
topoSet backupSet(mesh, toName, fromSet);
通过查找,我想我知道应该将topoSet声明为常量,但是我尝试了这一点,但没有任何区别。
我有一些性质相似的错误,但我只是想了解如何解决此错误。
最佳答案
您无法创建 topoSet
实例,因为它是包含虚拟未实现方法的抽象类( maxSize()
似乎是其中之一)。即使没有未实现的(纯虚拟的)成员,创建topoSet
实例也是错误的,因为您将丢失有关fromSet
的原始类型以及topoSet
之上的所有数据的所有信息(这类似到slicing)。
我认为您应该使用 topoSet::New()
静态函数之一(命名为构造函数),或者如果您只需要使用其他名称保存它,那么只需使用两次 topoSet::rename()
(实际上是regIOobject::rename()
)。