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()これらの1つのようです)。実装されていない (純粋な仮想) メンバーがなかったとしても、インスタンスを作成すると、 の元の型とその上にあったすべてのデータtopoSetに関するすべての情報が失われるため、間違っています(これはslicingに似ています) 。 .fromSettopoSet

静的関数 (名前付きコンストラクター)の 1 つを使用するかtopoSet::New()、別の名前で保存するだけでよい場合は、2 回使用する必要があると思いますtopoSet::rename()(実際にはregIOobject::rename())。

于 2015-10-08T10:19:46.393 に答える
0

抽象的であるため実行できないtopoSet backupSet;a をインスタンス化しようとするため、使用できません。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 に答える