Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
27.07.2011, 11:14     Ошибка при вызове виртуальной функции в производном классе #1
Здравствуйте, извините, если подобная тема появлялась, но либо у меня руки не от туда растут, либо ее небыло...

проблема в следующем: есть базовый класс, и два наследника(отличаются совсем немного, но...)
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 либо где-то еще возникает ошибка, что и поятно...да и создать наследников тоже нельзя, ибо она ни где не переопределена и они получаются виртуальными...
Как исправить есть идеи???)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2011, 11:14     Ошибка при вызове виртуальной функции в производном классе
Посмотрите здесь:

C++ Ошибка при вызове функции
Ошибка компиляции при вызове виртуальной функции C++
GCC ошибка при вызове функции C++
Почему при переопределении виртуального метода в производном классе выводится метод базового? C++
C++ Класс - Ошибки при вызове методов: В вызове функции отсутствует список аргументов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2011, 11:27     Ошибка при вызове виртуальной функции в производном классе #2
ну дык где код функции main ?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.07.2011, 11:28     Ошибка при вызове виртуальной функции в производном классе #3
Глупец, Есть. Сделать функцию не чисто виртуальной. Чисто виртуальная функция подразумевает ту же сигнатуру в производных классах.
Глупец
23 / 23 / 1
Регистрация: 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;
у наследников соответственно...
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
27.07.2011, 11:54     Ошибка при вызове виртуальной функции в производном классе #5
Не в тему, но все же...
virtual inline - это как вообще?
Компилятор проигнорирует inline для виртуальной функции.

Ну и сама задача - виртуальная функция с различными параметрами на C++ таким образом не решается.
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
27.07.2011, 11:57  [ТС]     Ошибка при вызове виртуальной функции в производном классе #6
soft.creator, про inline спасибо, я тоже сомневался, что сработает, но компил не ругнуля по крайней мере, и решил пока не править)))
А как тогда решить...может предложите хотя бы где почитеать, или пример напишите?)))
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2011, 11:57     Ошибка при вызове виртуальной функции в производном классе #7
косяк в том что чисто виртуальная функция не переопределяется в классах наследниках, а значит классы наследники такие же абстрактные как и базовый, а объект абстрактного класса создать никак нельзя
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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;
        }
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2011, 12:05     Ошибка при вызове виртуальной функции в производном классе
Еще ссылки по теме:

Ошибка при вызове функции добавления нового элемента в массив C++
C++ Оошибка при вызове шаблона функции в другом классе
C++ Ошибка при вызове функции transform с функцией, в качестве аргумента

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

Или воспользуйтесь поиском по форуму:
Глупец
23 / 23 / 1
Регистрация: 17.05.2011
Сообщений: 141
27.07.2011, 12:05  [ТС]     Ошибка при вызове виртуальной функции в производном классе #9
Maxwe11,Как бы это в первом посте было написано...это вполне понятно...
вопрос стоит следующим образом:"как сделать так, чтоб эта функция заработала с разными параметрами"

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

Добавлено через 1 минуту
grizlik78, спасибо...)))
и чего до меня раньше не дошло...)))
думаю, тема закрыта)))
Yandex
Объявления
27.07.2011, 12:05     Ошибка при вызове виртуальной функции в производном классе
Ответ Создать тему
Опции темы

Текущее время: 01:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru