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

Полиморфизм и ошибка "Слишком много аргументов" - C++

Восстановить пароль Регистрация
 
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
07.08.2014, 23:48     Полиморфизм и ошибка "Слишком много аргументов" #1
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
...
class Enemy
{
public:
    virtual int Damage() // или надо запить virtual int Damage(bool* Foo)
    {
        int x;
                ...
        return x;
    }   
};
class Crit : public Enemy
{
public:
    int Damage(bool *skill)
    {
                int x;
                ...
                skill = true;
        return x;
    }
};
class Dodger : public Enemy
{
public:
    int Damage(bool *skill)
    {
                int x;
                ...
                skill = true;
        return x;
    }
};
...
void Foo(Enemy* en, int i)
{
bool* temp;
en[i].Damage(temp); // вот здесь ругается, но если в метод класса Enemy добавить передачу аргумента, то норм 
}
int main()
{
Enemy* arr[2];
arr[0] = new Crit;
arr[1] = new Dodger;
return 0;
}

собственно вопрос в следующем, есть базовый класс, в нем есть виртуальный метод который нечего не принимает, но класс наследник, метод которого переписывает метод базового и в котором появилась потребность изменить значение по указателю, но при такое реализации ругается что слишком много аргументов, можно как-то обойти это или все таки в метод базового надо тоже добавить прием чего-то?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2014, 23:48     Полиморфизм и ошибка "Слишком много аргументов"
Посмотрите здесь:

C++ Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9"
Задача: "Слишком длинные слова" (RUNTIME_ERROR) C++
C++ Ошибка: слишком много включаемых файлов
C++ Ошибка : слишком много включаемых файлов
C++ Подсчет числа слов в тексте. Слишком много аргументов для вызова
C++ Написать реферат за пару часов на тему "Наследование, виртуальные функции и динамический полиморфизм"
C++ Ошибка "Слишком много аргументов в вызове функции"
Ошибка "error C2446: :: нет преобразования "int" в "char *" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.08.2014, 23:57     Полиморфизм и ошибка "Слишком много аргументов" #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
D_Ok, у замещенной в производном классе виртуальной функции должна быть такая же сигнатура как у базового класса. Единственное послабление - возможность менять тип возврата и то с ограничениями в виде единой иерархии.
Если в базовом классе реализация не предусмотрена, имеет смысл сделать функцию чисто виртуальной. Т.е.:
C++
1
2
3
4
5
class Enemy
{
public:
    virtual int Damage(bool* skill) = 0;
// ...
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
07.08.2014, 23:58     Полиморфизм и ошибка "Слишком много аргументов" #3
D_Ok, сигнатура функции должна быть одинакова. Т.е. да, надо будет добавить.
А вообще лучше взять какую-нибудь приличную книгу и изучать ООП в С++ по ней.
Yandex
Объявления
07.08.2014, 23:58     Полиморфизм и ошибка "Слишком много аргументов"
Ответ Создать тему
Опции темы

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