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 может быть объявлен как константа, но я попробовал это, и это не имело никакого значения.

У меня есть несколько ошибок подобного характера, но я просто пытаюсь понять, как это исправить.

1

Решение

Вы не можете создать topoSet экземпляр, потому что это абстрактный класс, содержащий виртуальные не реализованные методы (maxSize() кажется, один из них). Даже если не было не реализованных (чисто виртуальных) членов, создание topoSet экземпляр будет неправильным, так как вы потеряете всю информацию о том, что было первоначальным типом fromSet и все данные, которые он имел выше topoSetх (это сродни нарезка).

Я думаю, что вы должны использовать один из topoSet::New() статические функции (именованные конструкторы), или если все, что вам нужно сделать, это сохранить его под другим именем, то просто дважды используйте topoSet::rename() (на самом деле regIOobject::rename()).

2

Другие решения

Вы не можете использовать topoSet backupSet; так как это будет попытка создать экземпляр topoSet что вы не можете сделать, как это абстрактно.

Вместо этого вам необходимо создать экземпляр конкретного производного класса. Вам нужно будет найти что-то подходящее или создать это самостоятельно. Если предположить, что такая вещь называется foo тогда вы могли бы использовать указатель

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

или создать каталог foo backupSet(/*ToDo - parameters, omit the parentheses if there are no parameters*/),

0

По вопросам рекламы [email protected]