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

Ошибка передачи параметра в функцию - C++

Восстановить пароль Регистрация
 
Dmitryxxxl
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 6
15.08.2014, 19:17     Ошибка передачи параметра в функцию #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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "stdafx.h"
#include "War.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    War warv("Battle");
    warv.addWarrior(Barracks::createWarrior("Archer",warv[0]),100);
    warv.LetTheWarBegin();
}
Выскакивает ошибка  error C2676: бинарный "[": "War" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору.
 
[size="1"][color="grey"][I]Добавлено через 47 секунд[/I][/color][/size]
#include "stdafx.h"
#include "Barracks.h"
 
Warrior* Barracks::createWarrior(char *type, Warrior &warr)
{
    if (!strcmp(type, "Archer"))
        return new Archer(
        const_cast<char*>(warr.getName()),
        warr.getHealth());
    if (!strcmp(type, "SwordMan"))
        return new SwordMan(
        const_cast<char*>(warr.getName()),
        warr.getHealth());
    if (!strcmp(type, "Magie"))
        return new Magie(
        const_cast<char*>(warr.getName()),
        warr.getHealth());
    return nullptr;
}
 
Barracks::Barracks()
{
}
 
 
Barracks::~Barracks()
{
}
 
[size="1"][color="grey"][I]Добавлено через 43 секунды[/I][/color][/size]
#include "stdafx.h"
#include "War.h"
 
 
War::War(char *nm)
{
    strcpy(name , nm);
    idgenerator = 0;
}
 
int War::generateId()
{
    return idgenerator ++;
}
void War::addWarrior (Warrior *join,int health)
{ 
    join->setId(generateId());
    arm1.push_back(join);
}
void War::add2Warrior (Warrior *join,int health)
{ 
    join->setId(generateId());
    arm2.push_back(join);
}
void War::LetTheWarBegin()
{
    int i=0,h=0,m;
    i=arm1.size();
    h=arm2.size();
    if(i<h)m=h;
    else if(i>h)m=i;
    else m=i;
    random_shuffle(arm1.begin(), arm1.end());
    random_shuffle(arm2.begin(), arm2.end());
    for(int u=0;u<m;u++)
    {
        for(int l=arm1[u]->health,b=arm2[u]->health,v=arm1[u]->damage,c=arm2[u]->damage;l>0,b>0;)
        {
            cout<<l-u;
        }
    }
}
War::~War(void)
{
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
15.08.2014, 19:33     Ошибка передачи параметра в функцию #2
Цитата Сообщение от Dmitryxxxl Посмотреть сообщение
War warv("Battle");
warv.addWarrior(Barracks::createWarrior("Archer",warv[0]),100);
а почему создаете одну перемнную warv а передаете ее в функцию как массив?
C++
1
2
War warv("Battle");
warv.addWarrior(Barracks::createWarrior("Archer",warv),100);
либо в классе War должен быть оператор []
Dmitryxxxl
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 6
15.08.2014, 19:39  [ТС]     Ошибка передачи параметра в функцию #3
Если убрать скобки пишет:error C2664: Barracks::createWarrior: невозможно преобразовать параметр 2 из "War" в "Warrior &"
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
15.08.2014, 20:37     Ошибка передачи параметра в функцию #4
ну тогда наверно тут [] оператор доступа в классе war в котором есть массив класса Warrior.
на классы бы посмотреь вот на эти файлы War.h и Barracks.h
Dmitryxxxl
0 / 0 / 0
Регистрация: 15.08.2014
Сообщений: 6
15.08.2014, 20:42  [ТС]     Ошибка передачи параметра в функцию #5
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
#pragma once
#include "stdafx.h"
class War
{
    char name[40];
    vector<Warrior*>arm1;
    vector<Warrior*>arm2;
    int idgenerator;
public:
    War(char *nm);
    int generateId();
    void War::addWarrior (Warrior *warro,int health);
    void War::add2Warrior (Warrior *warro,int health);
    int getLength(){ return arm1.size(); }
    void LetTheWarBegin();
    ~War(void);
};
//---------------------------
#pragma once
class Barracks
{
public:
    static Warrior* createWarrior(char *type, Warrior &warr);
    Barracks();
    ~Barracks();
};
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
15.08.2014, 20:52     Ошибка передачи параметра в функцию #6
Цитата Сообщение от Dmitryxxxl Посмотреть сообщение
(char *type, Warrior &warr)
а War и Warrior это одно и то же?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2014, 21:03     Ошибка передачи параметра в функцию
Еще ссылки по теме:

C++ Передача параметра в функцию
Правильный способ передачи вектора в функцию C++
Способы передачи параметров в функцию C++

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

Или воспользуйтесь поиском по форуму:
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
15.08.2014, 21:03     Ошибка передачи параметра в функцию #7
ну тогда скорее всего отсутствует оператор доступa по индексу который возвращает Warrior &
из вектора arm1 или arm2
возможного чтото типа этого:
C++
1
Warrior& operator[]( int n ){ return arm1[n];}
Yandex
Объявления
15.08.2014, 21:03     Ошибка передачи параметра в функцию
Ответ Создать тему
Опции темы

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