1

我正在尝试用 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 可能应该被声明为一个常量,但我尝试了这个,它没有任何区别。

我有一些类似性质的错误,但我只是想了解如何解决这个错误。

4

2 回答 2

2

您不能创建topoSet实例,因为它是一个包含虚拟未实现方法的抽象类(maxSize()似乎是其中之一)。即使没有未实现的(纯虚拟)成员,创建topoSet实例也是错误的,因为您将丢失有关原始类型的所有信息fromSet以及上面的所有数据topoSet(这类似于slicing) .

我认为您应该使用topoSet::New()静态函数之一(命名构造函数),或者如果您需要做的就是将其保存为不同的名称,那么只需使用两次topoSet::rename()(实际上regIOobject::rename())。

于 2015-10-08T10:19:46.393 回答
0

您不能使用topoSet backupSet;它,因为它会尝试实例化topoSet您不能做的事情,因为它是抽象的。

您需要创建一个具体派生类的实例。您需要找到合适的东西或自己创建它。如果我们假设调用了这样的东西,foo那么您可以使用指针

topoSet* backupSet = new foo(/*ToDo - parameters*/)

或实例化目录foo backupSet(/*ToDo - parameters, omit the parentheses if there are no parameters*/)

于 2015-10-08T10:18:48.493 回答