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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
D_Ok
44 / 33 / 12
Регистрация: 11.02.2014
Сообщений: 134
#1

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

07.08.2014, 23:48. Просмотров 535. Ответов 2
Метки нет (Все метки)

Кликните здесь для просмотра всего текста
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;
}

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

Ошибка "Слишком много аргументов в вызове функции" - C++
Здравствуйте! Подскажите, пожалуйста, как это можно исправить #include <iostream> #include<Windows.h> #include <string.h> using...

Ошибка "Слишком много аргументов в вызове функции" - C++
bool FillMatrix::fillTrim() { int d,ky,h,m; n++; ky=n*n*n; m = n; while (m!=0) { d=m%10; ...

"Слишком много включаемых файлов" - C++
Как исправить ошибку??? слишком много включаемых файлов: глубина = 1024

Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон" - C++
Есть класс бинарного дерева, в нем структура. Класс - Tree, структура - list(листик, а не список). При компиляции выдает...

Слишком много аргументов в вызове функции, подчеркивает то что красным - C++
KVITANSIA.H class KVITANTSIA { public: int number; // номер int day, month, year; // дата float sum; // сума public:

Подсчет числа слов в тексте. Слишком много аргументов для вызова - C++
Пожалуйста помогите, нужно подсчитать количество слов в тексте, у меня выводит 2 ошибки: Ошибка 1 error C2197: bool (__cdecl...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.08.2014, 23:57 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
D_Ok, у замещенной в производном классе виртуальной функции должна быть такая же сигнатура как у базового класса. Единственное послабление - возможность менять тип возврата и то с ограничениями в виде единой иерархии.
Если в базовом классе реализация не предусмотрена, имеет смысл сделать функцию чисто виртуальной. Т.е.:
C++
1
2
3
4
5
class Enemy
{
public:
    virtual int Damage(bool* skill) = 0;
// ...
1
DrOffset
7134 / 4275 / 963
Регистрация: 30.01.2014
Сообщений: 7,064
07.08.2014, 23:58 #3
D_Ok, сигнатура функции должна быть одинакова. Т.е. да, надо будет добавить.
А вообще лучше взять какую-нибудь приличную книгу и изучать ООП в С++ по ней.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2014, 23:58
Привет! Вот еще темы с ответами:

Ошибка: "error C2660: getch: функция не принимает 1 аргументов" - C++
#include <stdio.h> #include <conio.h> #include <math.h> void main() {int i, n, x, fact, znak, y; printf ("VVedite n"); ...

Ошибка "при попытке сопоставить список аргументов" - C++
программа : #include <iostream> #include <conio.h> using std::endl; using std::cin; using std::cout;

Ошибка "в вызове функции отсутствует список аргументов" при работе с классами - C++
Учусь работать с классами С++ но часто встречаюсь с ошибкой: c:\program files (x86)\microsoft visual studio...

Ошибка при передача аргумента: "C2660: calc: функция не принимает 3 аргументов" - C++
Надо передать из void main() в void user(string login) аргумент login,и далее,не упоминав его в user,передать в void calc(string login)....


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

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

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