Добрый день показывает мне вот такую ошибкy: incomplete type Team used in nested name specifier вот код main.cpp
#include <iostream>
#include <string>
#include <time.h>
#include <dos.h>
#include "Manager.h"
#include "Soldier.h"
using namespace std;
int main()
{
srand ( time(NULL) );
string str;
Team team;
Manager manager;
manager.info();
//getline(cin, str);
//manager.getFunction(str);
cout << "Game over!" << endl;
return 0;
}
Manager.h
#ifndef MANAGER_H
#define MANAGER_H
#include <iostream>
#include <string>
#include <cstring>
#include <stdio.h>
#include <malloc.h>
using namespace std;
class Team;
class Manager
{
private:
typedef struct
{
string name;
int *adress;
} DB;
DB funcBase[19];
string param = "Nike";
public:
Manager(){
cout << "Welcome to the GAME!\nEnter your command to your army!" << endl;
funcBase[1].name = "addSoldier";
//funcBase[1].adress = &Team::addSoldier();
}
int getFunction(string strng){
char *str = new char[strng.length()];
strcpy(str, strng.c_str());
char *pos = strchr(str, ':');
int piece_length = pos-str;
char *str_action = new char[piece_length];
strncpy(str_action,str, piece_length);
str_action[piece_length] = '\0';
cout << str_action << endl;
delete [] str;
delete [] str_action;
}
int info()
{
cout << &Team::addSoldier();
}
protected:
};
#endif // MANAGER_H
Soldier.h
#ifndef SOLDIER_H
#define SOLDIER_H
class Team
{
private:
int i;
int soldier_count = 0;
int power;
int money = 700;
typedef struct
{
string name;
int strength;
int speed;
} Soldier;
Soldier Soldiers[19];
protected:
public:
Team(){
addSoldier("Andrew");
addSoldier("Sanchez");
addSoldier("Cody");
addSoldier("Bob");
}
int update_power()
{
i = 0;
power = 0;
for(i; i < soldier_count; i++)
{
int newpower = (Soldiers[i].strength*Soldiers[i].speed)/100;
power = power + newpower;
}
}
int addSoldier(string inputName){
if(soldier_count >= 20){cout << "Sorry you can't add more than 20 soldiers in your team:(" << endl; }
else
{
if(money < 100) {cout << "You have no money to add new soldier to your team!" << endl;}
else
{
soldier_count++;
Soldiers[soldier_count-1].strength = rand()%90 +30;
Soldiers[soldier_count-1].speed = rand()%400 + 100;
Soldiers[soldier_count-1].name = inputName;
money -= 100;
update_power();
}
}
}
int getInfo(){
cout << "Soldiers in your team right now:" << endl << "There are " << soldier_count << " soldiers in your team" << endl;
for(i = 0; i<soldier_count; i++){
cout<< "#" << i << " Name:" << Soldiers[i].name << " Strength:" << Soldiers[i].strength<< " Speed:" << Soldiers[i].speed<<endl;
}
cout<< "Total POWER is " << power << endl << "You have: " << money << "$" << endl;
}
int killSolder(int id)
{
if(id<=soldier_count && id>=0)
{
Soldiers[id].name = Soldiers[soldier_count-1].name;
Soldiers[id].speed = Soldiers[soldier_count-1].speed;
Soldiers[id].strength = Soldiers[soldier_count-1].strength;
Soldiers[soldier_count].name.empty();
soldier_count--;
update_power();
}
else{cout << "There is no soldier with id = " << id <<endl;}
}
int goToMission(int complexity){
if(power > 0)
{
int chance = 0;
int mResult = 0;
chance = power/400;
mResult = rand()%(101*complexity-chance);
if(mResult < 50)
{
i = 0;
for(i; i < soldier_count; i++)
{
Soldiers[i].speed = Soldiers[i].speed + rand()%(10*complexity) + 1;
Soldiers[i].strength = Soldiers[i].strength + rand()%(10*complexity) + 1;
}
money += 10*complexity;
cout << "Mission complete! Your solders get stat boost" << endl;
}
else
{
killSolder(rand()%(soldier_count - 1));
cout << "Mission failed! One of your soldiers dead." << endl;
}
update_power();
}
else{cout << "You should add at least one soldier in your team to start mission!" <<endl;}
}
};
#endif // SOLDIER_H
ошибка выскакивает в Manager.h, там где пытаюсь вывести адрес метода addSoldier из Team. Как сделать так что бы выводило адрес на метод?
Во-первых, адрес метода класса в С++ получается через выражение вида &Team::addSoldier
. Никаких круглых скобок а-ля "вызов функции" там быть не должно.
Во-вторых, стандартный потоковый оператор вывода <<
не имеет варианта для вывода указателей на члены, поэтому вывести адрес метода вы так не сможете, даже если его получите. (Компилятор на самом деле выберет "наиболее подходящую" перегрузку оператора <<
для типа bool
.)
В-третьих, чтобы получить адрес члена класса необходимо "видеть" полное определение этого класса. Простого объявления вида class Team;
совершенно недостаточно. Обеспечивайте такую видимость.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть два сервера, которые используют одну и ту же БД, но имеют разные способы работы к нейС первого сервера получаю следующий объект:
Где ошибка? При наведении на star-5 меняет background-position, если убираю мышь с star-5, то должна быть проверка (если star-5 не checked, то меняем background-position) Где...
На стандартные курсоры я сделал кнопку, при нажатии вызывается функция аргументом которой является имя курсора; В функции присваивается...
Добрый вечер, не могу разобраться с небольшим скриптом