Witam, podczas używania metody push_back kompilator zwraca błąd "Call to implicitly-deleted copy constructor of 'Monsters' memory. Poniżej podaje cały kod programu. Podobnie robię w swoim innym programie, gdzie wszystko działa ładnie ( tam nie używam class zaprzyjaźnionych, ale to chyba nie ma nic do rzeczy).
class Hero
{
public:
//features
string name;
int strenght;
int dexterity;
int HP;
int intelligence;
int charisma;
fstream file;
Hero(string ,int, int, int, int, int);
Hero();
void showStats();
void save();
void load(string path);
friend class Magus;
friend class Warrior;
friend class Berserker;
friend class Thief;
};
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <vector>
#include "Hero.hpp"
#include "Thief.hpp"
#include "Warrior.hpp"
#include "Magus.hpp"
#include "Berserker.hpp"
#include "Monsters.hpp"
#include "Libraries.hpp"
using namespace std;
class Engine
{
public:
int menuChoose;
enum EngineState {MENU,CREATE_HERO,SAVE_HERO,LOAD_HERO,CHANGE_STATS,CREATE_MONSTERS,END};
EngineState state;
Hero hero;
Magus magus;
Berserker berserker;
Warrior warrior;
Thief thief;
Monsters monster;
vector<Monsters>::const_iterator iterMonster;
vector<Monsters> MonstersArray;
Engine();
int menuEngine();
void startEngine();
void createHero();
void save();
void load();
void change_stats();
void create_monster();
void save_monsters();
};
//
// Engine.cpp
// KonstruktoryDestruktory
//
// Created by Mac Paweł on 12.05.2017.
// Copyright © 2017 Macbook PRO 13. All rights reserved.
//
void Engine::startEngine()
{
while(state != END)
{
//program loop
system("clear");
switch (state)
{
case EngineState::MENU :
menuEngine();
break;
case EngineState::CREATE_HERO :
createHero();
break;
case EngineState::SAVE_HERO :
save();
break;
case EngineState::LOAD_HERO :
load();
break;
case EngineState::CHANGE_STATS:
change_stats();
break;
case EngineState::CREATE_MONSTERS:
//
break;
case EngineState::END :
//exit
break;
}
}
}
void Engine::create_monster()
{
bool choose2 = false;
int choose_option;
while(state!=MENU)
{
hero.showStats();
cout<<"1. Create monster "<<endl;
cout<<"2. Save Monster "<<endl;
cout<<"3. Back do Menu "<<endl;
cin>>choose_option;
//ENTER ERROR CONTROL
if(choose_option ==1 || choose_option==2 || choose_option==3)
{
choose2 = false;
}
else choose2 = true;
while(choose2 == true)
{
cout<<"Choose again! ( 1 or 2 or 3)"<<endl;
cin>> choose_option;
if(choose_option==1 || choose_option == 2 || choose_option==3)
{
choose2 = false;
}
else choose2 = true;
}
switch (choose_option)
{
case 1:
{
cout<<"Enter monsters names: ";
cout<<"Enter Monster1 name: ";
cin>>monster.name;
cout<<"Monster1 name is: "<<monster.name;
MonstersArray.push_back(monster);
cout<<"Enter Monster2 name: ";
cin>>monster.name;
cout<<"Monster2 name is: "<<monster.name;
MonstersArray.push_back(monster);
cout<<"Enter Monster3 name: ";
cin>>monster.name;
cout<<"Monster3 name is: "<<monster.name;
MonstersArray.push_back(monster);
cout<<"Enter Monster4 name: ";
cin>>monster.name;
cout<<"Monster4 name is: "<<monster.name;
MonstersArray.push_back(monster);
cout<<"Enter Monster5 name: ";
cin>>monster.name;
cout<<"Monster5 name is: "<<monster.name;
MonstersArray.push_back(monster);
break;
}
case 2:
{
cout<<"Saving monsters to file"<<endl;
int counterMonster = 0;
for(iterMonster=MonstersArray.begin(); iterMonster !=MonstersArray.end(); iterMonster++)
{
MonstersArray[counterMonster].save();
counterMonster++;
}
break;
}
case 3:
{
state=MENU;
break;
}
}
system("clear");
}
}
class Monsters:public Hero { public: Monsters(); };
Monsters::Monsters()
{
name = "";
strenght = generateRandom(10);
dexterity =generateRandom(10);
HP = generateRandom(10);
intelligence = generateRandom(10);
charisma = generateRandom(10);
}
Problem występuje przy metodzie push_back w Engine.cpp