C ++ - 不能将变量声明为抽象类型

时间:2015-10-08 10:12:39

标签: c++ openfoam

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您无法使用topoSet backupSet;,因为这会尝试实例化topoSet,而您无法做到这一点。

您需要创建具体派生类的实例。您需要找到合适的东西或自己创建。如果我们假设这样的事情被称为foo,那么你可以使用指针

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

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