Pereiti prie turinio

Microsoft C++ exception: std::out_of_range at memory location 0x0041ee7c..


Rekomenduojami pranešimai

Laba diena. yra tokia schema:

 

http://www.part.lt/img/060cc0ea262f7469c844f1f18aee0f5782.png

 

 

Užduoties nėra, tiesiog turiu pasiekti Privilege klasę kažkaip. Aš manau, kad reikia eiti per User iki Role ir tada pasiekiu ta Privilege, bet man meta klaidą, paminėta temoje. Kodas toks:

 

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;

// State
class IState
{
virtual string getState() = 0;
virtual void setState(string state) = 0;
};
class Privilege{
private:
	string name;
public:
Privilege()
{
	this->name = "";	
}
Privilege(string name)
{
	this->name = name;
}
void setName(string name)
{
	this->name = name;
}
string getName()
{
	return this->name;	
}
};
class Module{
private :
	string name;
	string description;
	string data_modified;
public : Module(string name)
{
	this->name = this->description = this->data_modified = "";
}
Module(string name, string description, string email)
{
	this->name = name;
	this->description = description;
	this->data_modified = data_modified;
}
void setName(string name)
{
	this->name = name;
}
string getName()
{
	return this->name;
}
void setDescription(string description)
{
	this->description = description;
}
string getDescription()
{
	return this->description;
}
void setData_modified(string data_modified)
{
	this->data_modified = data_modified;
}
string getData_modified()
{
	return this->data_modified;
}
};


class Role : IState
{
private:
	string name;
	short int state; // 0 - activated, 1 - disabled, 2 - deleted
	vector <Module> assignedModules;
	vector <Privilege> assignedPrivileges;
public:
Role() 
{
	this->name = "";
	this->state = 0; 
}
Role(string name, short int state = 0) 
{
	this->name = name;	
	this->state = state;
}
void setName(string name)
{
	this->name = name;
}
string getName()
{
	return this->name;
}
void activateRole()
{
	this->state = 0;
}
bool isActivated()
{
	return this->state == 0;
}
bool isDeleted()
{
	return this->state == 2;
}
void deleteRole()
{
	this->state = 2;
}
bool isDisabled()
{
	return this->state == 1;
}
void disableRole()
{
	this->state = 1;
}
string getState()
{
	if (this->isActivated())
		return"activated";
	else if (this->isDeleted())
		return"deleted";
	else if (this->isDisabled())
		return"disabled";
	else
		return"unknown";
}
void setState(string state)
{
	if (state == "activated")
		this->state = 1;
	else if (state == "deleted")
		this->state = 0;
	else if (state == "disabled")
		this->state = 2;
}
/////////////////////////////////
Module getAssignedModule()
{
	return this->assignedModules.at(0);
}
void assignModule(Module module)
{
	this->assignedModules.clear();
	this->assignedModules.push_back(module);		
}
void deassignModule()
{
	this->assignedModules.clear();
}
bool hasAssignedModule()
{
	return this->assignedModules.size() == 1;
}
/////////////////////////////////
vector<Privilege> getPrivilege()
{
	return this->assignedPrivileges;
}
int countPrivilege()
{
	return this->assignedPrivileges.size();
}	
bool hasAssignedPrivilege()
{
	return this->assignedPrivileges.size() == 1;
}
void assignPrivilege(Privilege privilege)
{
	this->assignedPrivileges.clear();
	this->assignedPrivileges.push_back(privilege);		
}
};

class User : IState
{
private:
	string name;
	string pass;
	string email;
	short int state; // 0 aktyvuotas 1 neaktyvuotas 2 pasalintas
	vector <Role> assignedRoles;
public:
	User() 
	{
		this->name = this->pass = this->email = "";
		this->state = 0; 
	}
User(string name, string pass, string email, short int state = 0) 
{
	this->name = name;
	this->pass = pass;
	this->email = email;
	this->state = state;
}
void setName(string name)
{
	this->name = name;
}
string getName()
{
	return this->name;
}
void setPassword(string pass)
{
	this->pass = pass;
}
string getPassword()
{
	return this->pass;
}
void setEmail(string email)
{
	this->email = email;
}
string getEmail()
{
	return this->email;
}
void activateUser()//0 aktyvuotas 1 neaktyvuotas 2 pasalintas
{
	this->state = 0;
}
bool isActivated()
{
	return this->state == 0;
}
bool isDeleted()
{
	return this->state == 2;
}
void deleteUser()
{
	this->state = 2;
}
bool isDisabled()
{
	return this->state == 1;
}
void disableUser()
{
	this->state = 1;
}
string getState()
{
	if (this->isActivated())
		return"activated";
	else if (this->isDeleted())
		return"deleted";
	else if (this->isDisabled())
		return"disabled";
	else
		return"unknown";
}
void setState(string state)
{
	if (state == "activated")
		this->state = 1;
	else if (state == "deleted")
		this->state = 0;
	else if (state == "disabled")
		this->state = 2;
}
bool hasRole(string roleName)
{		
	vector<Role>::iterator p = this->assignedRoles.begin();
	while(p != this->assignedRoles.end()) 
	{
		if (roleName == p->getName())
			return true;
		p++;
	}
	return false;
}
void assignRole(Role role)
{
	if (!this->hasRole(role.getName()))
		this->assignedRoles.push_back(role);
}
void deassignRole(string roleName)
{
	int item = 0;
	vector<Role>::iterator p = this->assignedRoles.begin();
	while(p != this->assignedRoles.end()) 
	{
		if (roleName == p->getName())
		{
			this->assignedRoles.erase(this->assignedRoles.begin()+item);
			return;
		}
		p++;
		item++;
	}				
}
/////////////////////////////////////////
Role getAssignedRole()
{
	return this->assignedRoles.at(0);
}
void deassignRole()
{
	this->assignedRoles.clear();
}
bool hasAssignedRole()
{
	return this->assignedRoles.size() == 1;
}
};

void outputUsers(vector<User> users);

int _tmain(int argc, _TCHAR* argv[])
{
	// User klases testavimas

	vector<User> users;

	users.push_back(User("Mantas","sexiukas69 ","[email protected]"));
	users.push_back(User("Petras","gerulis69 ","[email protected]"));
	users.push_back(User("Jonas ","zveris69 ","[email protected]"));
	users.push_back(User("Miskas","gauruotas69","[email protected]"));

	cout << "Pradinis vartotoju sarasas: " << endl;
	outputUsers(users); 
	cout << "\n\n" ;	

	cout << "Pirmam ir antram vartotojui priskiriam atitinkamas roles: " << endl;
	users.at(0).assignRole(Role("Administratorius"));
	users.at(1).assignRole(Role("Programuotojoas"));
	outputUsers(users);
	cout << "\n\n";

	cout << "Padarom trecia vartotoja isjungta: " << endl;
	users.at(2).disableUser();
	outputUsers(users);
	cout << "\n\n";

	cout << "Trecia vartotojo pasalinam: " << endl;
	users.at(2).deleteUser();
	outputUsers(users);
	cout << "\n\n";

	cout << "Pirmam vartotojui suteikiame pivilegija: " << endl;
	Role role = users.at(0).getAssignedRole();
	role.assignPrivilege(Privilege("Pilnas failu redagavimas"));
	users.at(0).assignRole(role);
	outputUsers(users);
	cout << "\n\n";


system ("pause");
return 0;
}

void outputUsers(vector<User> users){

vector <User>::iterator p = users.begin();

while(p != users.end()){
	cout << p->getName() << ", " << p->getPassword() << ", " << p->getEmail() << ", " << p->getState() << endl;
	if(p->hasAssignedRole()){
		cout << p->getAssignedRole().getName() << ", " << p->getAssignedRole().getState() << endl;
	}
	if(p->getAssignedRole().countPrivilege() > 0){
		vector <Privilege> priv = p->getAssignedRole().getPrivilege();
		vector <Privilege>::iterator r =priv.begin();
		while(r != priv.end()){
			cout << r->getName() << endl;
			r++;
		}
	}
	p++;
}
}

 

Apskritai aš net nežinau ką ir be komentuoti čia ar pridėti, tiesiog labai tikiuosi, kad kas nors pamatys kur darau klaidą, nes pats jau nebesusigaudau visiškai. Dėkui už bet kokią pagalbą.

Redagavo MrDBVids
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na čia tas erroras dėl šitos eilutės turbūt:

 

if(p->getAssignedRole().countPrivilege() > 0){

. Bet tai pakeitu į

if(p->hasAssignedRole()){

pasileidžia kaip ir programa, bet neišveda

                cout << "Pirmam vartotojui suteikiame pivilegija: " << endl;
               Role role = users.at(0).getAssignedRole();
               role.assignPrivilege(Privilege("Pilnas failu redagavimas"));
               users.at(0).assignRole(role);
               outputUsers(users);
               cout << "\n\n";

šio testavimo. Su juo man ir yra problema, nes nesugebu normaliai pasiekti privilegijų. Negaliu priskirti vartotojui jų.

Redagavo MrDBVids
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kaip ir int turi būti, nes dėstytojo duotame pavyzdyje buvo integer tipas tie šiuo methodu. Bet kaip sakiau, išrynus ta "> 0" ir pakeitus į

if p->hasAssignedRole(){.......}

memory klaidos nebemeta, tačiau neparodo tų privilegijų. Reiks turbūt vėl viską per naujo trint ir žiūrėt, kur ką pridirbau.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkui visiems už pagalbas bet susiradau kame problema buvo(tiksliau gal kokios 5 problemos, kurias išėjo pataisyti). Mano galutinis kodas, su veikiančia Privilege klase(jei kam įdomu):

 

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;

// State
class IState
{
       virtual string getState() = 0;
       virtual void setState(string state) = 0;
};
class Privilege{
       private:
               string name;
       public:
       Privilege()
       {
               this->name = "";        
       }
       Privilege(string name)
       {
               this->name = name;
       }
       void setName(string name)
       {
               this->name = name;
       }
       string getName()
       {
               return this->name;      
       }
};
class Module{
       private :
               string name;
               string description;
               string data_modified;
       public : Module(string name)
       {
               this->name = this->description = this->data_modified = "";
       }
       Module(string name, string description, string email)
       {
               this->name = name;
               this->description = description;
               this->data_modified = data_modified;
       }
       void setName(string name)
       {
               this->name = name;
       }
       string getName()
       {
               return this->name;
       }
       void setDescription(string description)
       {
               this->description = description;
       }
       string getDescription()
       {
               return this->description;
       }
       void setData_modified(string data_modified)
       {
               this->data_modified = data_modified;
       }
       string getData_modified()
       {
               return this->data_modified;
       }
};


class Role : IState
{
       private:
               string name;
               short int state; // 0 - activated, 1 - disabled, 2 - deleted
               vector <Module> assignedModules;
               vector <Privilege> assignedPrivileges;
       public:
       Role() 
       {
               this->name = "";
               this->state = 0; 
       }
       Role(string name, short int state = 0) 
       {
               this->name = name;      
               this->state = state;
       }
       void setName(string name)
       {
               this->name = name;
       }
       string getName()
       {
               return this->name;
       }
       void activateRole()
       {
               this->state = 0;
       }
       bool isActivated()
       {
               return this->state == 0;
       }
       bool isDeleted()
       {
               return this->state == 2;
       }
       void deleteRole()
       {
               this->state = 2;
       }
       bool isDisabled()
       {
               return this->state == 1;
       }
       void disableRole()
       {
               this->state = 1;
       }
       string getState()
       {
               if (this->isActivated())
                       return"activated";
               else if (this->isDeleted())
                       return"deleted";
               else if (this->isDisabled())
                       return"disabled";
               else
                       return"unknown";
       }
       void setState(string state)
       {
               if (state == "activated")
                       this->state = 1;
               else if (state == "deleted")
                       this->state = 0;
               else if (state == "disabled")
                       this->state = 2;
       }
       /////////////////////////////////
       Module getAssignedModule()
       {
               return this->assignedModules.at(0);
       }
       void assignModule(Module module)
       {
               this->assignedModules.clear();
               this->assignedModules.push_back(module);                
       }
       void deassignModule()
       {
               this->assignedModules.clear();
       }
       bool hasAssignedModule()
       {
               return this->assignedModules.size() == 1;
       }
       /////////////////////////////////
       vector<Privilege> getPrivilege()
       {
               return this->assignedPrivileges;
       }
       int countPrivilege()
       {
               return this->assignedPrivileges.size();
       }       
       bool hasAssignedPrivilege()
       {
               return this->assignedPrivileges.size() == 1;
       }
	bool hasPrivilege(string privName)
	{		
	vector<Privilege>::iterator p = this->assignedPrivileges.begin();
	while(p != this->assignedPrivileges.end()) 
	{
		if (privName == p->getName())
			return true;
		p++;
	}
	return false;
	}
	void assignPrivilege(Privilege priv)
	{
		if (!this->hasPrivilege(priv.getName()))
			this->assignedPrivileges.push_back(priv);
	}
};

class User : IState
{
       private:
               string name;
               string pass;
               string email;
               short int state; // 0 aktyvuotas 1 neaktyvuotas 2 pasalintas
               vector <Role> assignedRoles;
       public:
               User() 
               {
                       this->name = this->pass = this->email = "";
                       this->state = 0; 
               }
       User(string name, string pass, string email, short int state = 0) 
       {
               this->name = name;
               this->pass = pass;
               this->email = email;
               this->state = state;
       }
       void setName(string name)
       {
               this->name = name;
       }
       string getName()
       {
               return this->name;
       }
       void setPassword(string pass)
       {
               this->pass = pass;
       }
       string getPassword()
       {
               return this->pass;
       }
       void setEmail(string email)
       {
               this->email = email;
       }
       string getEmail()
       {
               return this->email;
       }
       void activateUser()//0 aktyvuotas 1 neaktyvuotas 2 pasalintas
       {
               this->state = 0;
       }
       bool isActivated()
       {
               return this->state == 0;
       }
       bool isDeleted()
       {
               return this->state == 2;
       }
       void deleteUser()
       {
               this->state = 2;
       }
       bool isDisabled()
       {
               return this->state == 1;
       }
       void disableUser()
       {
               this->state = 1;
       }
       string getState()
       {
               if (this->isActivated())
                       return"activated";
               else if (this->isDeleted())
                       return"deleted";
               else if (this->isDisabled())
                       return"disabled";
               else
                       return"unknown";
       }
       void setState(string state)
       {
               if (state == "activated")
                       this->state = 1;
               else if (state == "deleted")
                       this->state = 0;
               else if (state == "disabled")
                       this->state = 2;
       }
       bool hasRole(string roleName)
       {               
               vector<Role>::iterator p = this->assignedRoles.begin();
               while(p != this->assignedRoles.end()) 
               {
                       if (roleName == p->getName())
                               return true;
                       p++;
               }
               return false;
       }
	void assignRole(Role role)
	{
		this->assignedRoles.clear();
		this->assignedRoles.push_back(role);		
	}
       void deassignRole(string roleName)
       {
               int item = 0;
               vector<Role>::iterator p = this->assignedRoles.begin();
               while(p != this->assignedRoles.end()) 
               {
                       if (roleName == p->getName())
                       {
                               this->assignedRoles.erase(this->assignedRoles.begin()+item);
                               return;
                       }
                       p++;
                       item++;
               }                               
       }
       /////////////////////////////////////////
       Role getAssignedRole()
       {
               return this->assignedRoles.at(0);
       }
       void deassignRole()
       {
               this->assignedRoles.clear();
       }
       bool hasAssignedRole()
       {
               return this->assignedRoles.size() == 1;
       }
};

void outputUsers(vector<User> users);

int _tmain(int argc, _TCHAR* argv[])
{
               // User klases testavimas

               vector<User> users;

               users.push_back(User("Mantas","sexiukas69 ","[email protected]"));
               users.push_back(User("Petras","gerulis69 ","[email protected]"));
               users.push_back(User("Jonas ","zveris69 ","[email protected]"));
               users.push_back(User("Miskas","gauruotas69","[email protected]"));

               cout << "Pradinis vartotoju sarasas: " << endl;
               outputUsers(users); 
               cout << "\n\n" ;        

               cout << "Pirmam ir antram vartotojui priskiriam atitinkamas roles: " << endl;
               users.at(0).assignRole(Role("Administratorius"));
               users.at(1).assignRole(Role("Programuotojoas"));
               outputUsers(users);
               cout << "\n\n";

               cout << "Padarom trecia vartotoja isjungta: " << endl;
               users.at(2).disableUser();
               outputUsers(users);
               cout << "\n\n";

               cout << "Trecia vartotojo pasalinam: " << endl;
               users.at(2).deleteUser();
               outputUsers(users);
               cout << "\n\n";

               cout << "Pirmam vartotojui suteikiame pivilegija: " << endl;
               Role role = users.at(0).getAssignedRole();
               role.assignPrivilege(Privilege("Pilnas failu redagavimas"));
               users.at(0).assignRole(role);
               outputUsers(users);
               cout << "\n\n";




       system ("pause");
       return 0;
}

void outputUsers(vector<User> users){

       vector <User>::iterator p = users.begin();

       while(p != users.end()){
               cout << p->getName() << ", " << p->getPassword() << ", " << p->getEmail() << ", " << p->getState() << endl;
               if(p->hasAssignedRole()){
                       cout << p->getAssignedRole().getName() << ", " << p->getAssignedRole().getState() << endl;
               }
               if(p->hasAssignedRole()){
                       vector <Privilege> priv = p->getAssignedRole().getPrivilege();
                       vector <Privilege>::iterator r =priv.begin();
                       while(r != priv.end()){
                               cout << r->getName() << endl;
                               r++;
                       }
               }
               p++;
       }
}

 

Visu pirma buvau suklydęs getAssignedRole methode, taip pat suklydau ir assignPrivilege methode. Na, vienu žodžiu dėkui už pagalbas, tačiau išveda privilegijas ir gerai, nors kodas ir labai prišiukšlintas gavosi :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...