Я пытаюсь написать некоторый код на 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
х (это сродни нарезка).
Я думаю, что вы должны использовать один из topoSet::New()
статические функции (именованные конструкторы), или если все, что вам нужно сделать, это сохранить его под другим именем, то просто дважды используйте topoSet::rename()
(на самом деле regIOobject::rename()
).
Вы не можете использовать topoSet backupSet;
так как это будет попытка создать экземпляр topoSet
что вы не можете сделать, как это абстрактно.
Вместо этого вам необходимо создать экземпляр конкретного производного класса. Вам нужно будет найти что-то подходящее или создать это самостоятельно. Если предположить, что такая вещь называется foo
тогда вы могли бы использовать указатель
topoSet* backupSet = new foo(/*ToDo - parameters*/)
или создать каталог foo backupSet(/*ToDo - parameters, omit the parentheses if there are no parameters*/)
,