2014-12-16 6 views
-2

У меня проблема с использованием базы классов с использованием чистого виртуального метода. Метод должен быть виртуальным.Производный класс (чистый виртуальный C++)

Я получаю эту ошибку:

Error: object of abstract class type "Membro" is not allowed: function "Membro::mensalidade" is a pure virtual function 

enter image description here

Любой человек может помочь?

Спасибо!

+2

Вы не можете создать экземпляр абстрактного типа. Membro содержит чистый виртуальный метод и поэтому является абстрактным. Вы не можете создать объект типа Membro. (Я знаю, что это, по сути, сообщение об ошибке, но ...) – Borgleader

+1

'Membro' содержит чистую виртуальную функцию, поэтому невозможно создать экземпляр. – Bathsheba

+0

Что вы подразумеваете под словом «должно быть виртуальным»? – alediaferia

ответ

2

Проблема возникает из сообщения об ошибке: вы не можете создавать объект абстрактного класса.

Однако, кажется, что нет необходимости создавать объект абстрактного класса в функции, которую вы показывали. Как я понял, функция выполняет поиск объекта с заданной строкой bi. Вы можете использовать выражение лямбда в каком-либо методе поиска.

В этом проблема заключается в неправильной конструкции функции. Чтобы получить более точный ответ, вы должны показать функцию, а также тип membros.

+0

Как я могу найти участника без создания нового объекта? –

+0

@ Mister Jonh Каков тип membros? –

+0

membros - это коллекция членов. Membro является базой классов и имеет 2 класса. –

2

Вы не можете создать экземпляр абстрактного класса.

Любой класс является абстрактным, если он содержит по крайней мере один один чисто виртуальный метод (например, ничего с = 0; в конце функции подписи).

Вы должны создать экземпляр класса, полученного из абстрактного класса (который должен реализовать чистую виртуальную функцию (ы), чтобы не быть абстрактным) вместо этого и вернуть указатель на это. Тип указателя может быть типом абстрактного класса, а объект, на который он указывает, должен быть подклассом абстрактного класса, позволяющим получить доступ к производным классам полиморфно.

+0

«если он содержит более одного чистого виртуального» должен быть «если он содержит хотя бы один чистый-виртуальный» – Borgleader

+0

Отмечено и исправлено, спасибо :) –

0

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

Этот тип класса имеет название: Abstract Classes. или Интерфейсы.

2

Как и ошибка: Membro::mensalidade - это чистая виртуальная функция. Это означает, что вы не можете использовать Membro напрямую, но вы должны реализовать его в подклассе и переопределить по крайней мере все чистые виртуальные методы.

+0

Но я хочу использовать атрибуты члена для поиска. Как метод mensalidade является чистым, и я не могу создать новый объект. Как я могу это сделать? –

2

Если класс содержит хотя бы одну чистую виртуальную функцию, то этот класс является абстрактным. Это означает, что вы не можете создать объект этого класса. Абстрактные классы служат классами интерфейсов для более производного класса.

Однако вы можете определить эту чистую виртуальную функцию. Но эта функция имеет ограниченное использование, кроме как для впечатления ваших коллег.

 Смежные вопросы

  • Нет связанных вопросов^_^