Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Глупец
23 / 23 / 3
Регистрация: 17.05.2011
Сообщений: 141
#1

Ошибка при вызове виртуальной функции в производном классе - C++

27.07.2011, 11:14. Просмотров 1005. Ответов 8
Метки нет (Все метки)

Здравствуйте, извините, если подобная тема появлялась, но либо у меня руки не от туда растут, либо ее небыло...

проблема в следующем: есть базовый класс, и два наследника(отличаются совсем немного, но...)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class B{
    public:
    virtual inline A* funk()=0;
};
 
class N: public B{
    long* val;
    public:
    inline A* funk(long* param){
        val=param;
        return this;
    }
};
class S: public B{
    char* val;
    public:
    inline A* funk(char* param){
        val=param;
        return this;
    }
};
так вот при вызове funk в main либо где-то еще возникает ошибка, что и поятно...да и создать наследников тоже нельзя, ибо она ни где не переопределена и они получаются виртуальными...
Как исправить есть идеи???)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2011, 11:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при вызове виртуальной функции в производном классе (C++):

Ошибка компиляции при вызове виртуальной функции
Здравствуйте. Сильно не плюйтесь, в С я не силен. Пишу на джаве, но попал в...

Ошибка при вызове шаблона функции в другом классе
цель моей функции- выводить значения переменной в любом формате. функция в...

Запрет на использование функции в производном классе
Имеется class List представляющий двунаправленный список, с реализованными...

Почему при переопределении виртуального метода в производном классе выводится метод базового?
Всем добра! Помогите разобраться почему при переопределении виртуального...

Почему при множественном наследовании в производном классе оказывется несколько экземпляров общего базового класса
Я не очень хорошо знаю плюсы, но я разбираюсь. Учусь, и мне хотелось бы иногда...

Ошибка при вызове функции
Добрый день! Есть функция по расчету детерминанта int _det(int size,double...

8
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2011, 11:27 #2
ну дык где код функции main ?
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.07.2011, 11:28 #3
Глупец, Есть. Сделать функцию не чисто виртуальной. Чисто виртуальная функция подразумевает ту же сигнатуру в производных классах.
0
Глупец
23 / 23 / 3
Регистрация: 17.05.2011
Сообщений: 141
27.07.2011, 11:50  [ТС] #4
Maxwe11,
C++
1
2
3
4
5
B** mass;
mass=new B*[2];
mass[0]=new N;//вот здесь
mass[1]=new S;//здесь
mass[1]->funk("ghjkl;asd");//и здесь будут косяки
ForEveR, извините, не совсем понял, т.е. если funk не будет чисто виртуальной функцией, то
C++
1
B* S::funk(char* param);
будет считаться ее перегрузкой, или просто компилятор сам поймет, что надо вызвать именно ее...

Добавлено через 8 минут
да и, извините, в первом посте в коде косяк небольшой:
не
Цитата Сообщение от Глупец Посмотреть сообщение
virtual inline A* funk()=0;
а
C++
1
virtual inline B* funk()=0;
у наследников соответственно...
0
soft.creator
104 / 104 / 11
Регистрация: 17.10.2010
Сообщений: 283
27.07.2011, 11:54 #5
Не в тему, но все же...
virtual inline - это как вообще?
Компилятор проигнорирует inline для виртуальной функции.

Ну и сама задача - виртуальная функция с различными параметрами на C++ таким образом не решается.
1
Глупец
23 / 23 / 3
Регистрация: 17.05.2011
Сообщений: 141
27.07.2011, 11:57  [ТС] #6
soft.creator, про inline спасибо, я тоже сомневался, что сработает, но компил не ругнуля по крайней мере, и решил пока не править)))
А как тогда решить...может предложите хотя бы где почитеать, или пример напишите?)))
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2011, 11:57 #7
косяк в том что чисто виртуальная функция не переопределяется в классах наследниках, а значит классы наследники такие же абстрактные как и базовый, а объект абстрактного класса создать никак нельзя
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,048
27.07.2011, 12:00 #8
Ну, в данном случае можно-таки сделать одинаковую сигнатуру
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class B{
        public:
        virtual B* funk(void*)=0;
};
 
class N: public B{
        long* val;
        public:
        B* funk(void* param){
                val=(long*)param;
                return this;
        }
};
class S: public B{
        char* val;
        public:
        B* funk(void* param){
                val=(char*)param;
                return this;
        }
};
1
Глупец
23 / 23 / 3
Регистрация: 17.05.2011
Сообщений: 141
27.07.2011, 12:05  [ТС] #9
Maxwe11,Как бы это в первом посте было написано...это вполне понятно...
вопрос стоит следующим образом:"как сделать так, чтоб эта функция заработала с разными параметрами"

т.е. если мы вызываем ее для класса S с параметром long-она не сможет ее принять, если с char-все нормально, но при этом же объекты классов наследников хранятся в одном массиве...

Добавлено через 1 минуту
grizlik78, спасибо...)))
и чего до меня раньше не дошло...)))
думаю, тема закрыта)))
0
27.07.2011, 12:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2011, 12:05
Привет! Вот еще темы с решениями:

Ошибка при вызове функции
В функции NewWords вызывается функция correct,при отладке я не могу войти в эту...

Ошибка при вызове функции
Ошибка в строке 90, при пошаговом выполнении она появляется при вызове функции,...

GCC ошибка при вызове функции
Здравствуйте. Проблема в следующем: при вызове функции sub из тела add...

Непонятная ошибка при вызове функции от тут же создаваемого объекта
Ошибка появляется в строке 42: #include "list.h" #include <iostream> using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru