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