我正在尝试用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())。

08-16 09:02