cenorasped Posted February 6, 2014 at 07:33 PM Report #544271 Posted February 6, 2014 at 07:33 PM (edited) class A { B a; public: ~A(){} }; class B { A b; public: ~B(){} }; Como meto isto a funcionar? Edited February 6, 2014 at 07:34 PM by cenorasped
HappyHippyHippo Posted February 6, 2014 at 08:12 PM Report #544279 Posted February 6, 2014 at 08:12 PM class B; class A { B xpto; }; class B { A xpto; }; IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
cenorasped Posted February 6, 2014 at 09:05 PM Author Report #544284 Posted February 6, 2014 at 09:05 PM (edited) class Aquario; class Peixe{ string nome; string cor; int peso; int barriga; int numeroSerie; static int conta; public: Peixe(string Nome, string Cor = "cinzento", int Peso = 10, int tamanoDeAlimentos = 50) : nome(Nome), cor(Cor), peso(Peso), barriga(tamanoDeAlimentos) { numeroSerie = ++conta; cout << endl << numeroSerie << endl; } ~Peixe(){ } void alimentase(Aquario *aqu, int quantidade_alimento) { peso += quantidade_alimento; if (peso > barriga) { aqu->removePeixe(this); /// continuo a ter o problema aqui <<<<<----------------------- } } int ObtemNumeroSerie() { return numeroSerie; } string ObtemNome() { return nome; } }; int Peixe::conta; class Aquario { string nome; vector < Peixe* > Peixes; public: Aquario(string Nome) :nome(Nome){} ~Aquario(){ for (int i = 0; i < (int) Peixes.size(); i++) delete Peixes[i]; } void addPeixe(Peixe *a){ Peixes.push_back(a); } void alimentarPeixe(int quantidadeAlimento = 5) { for (int i = 0; i < (int) Peixes.size(); i++) Peixes[i]->alimentase(this, quantidadeAlimento); } bool VerificaExistenciaPeixe(int numeroSerie) { for (int i = 0; i < (int) Peixes.size(); i++) if (Peixes[i]->ObtemNumeroSerie() == numeroSerie) return true; return false; } bool removePeixe(Peixe *a) { for (int i = 0; i < (int) Peixes.size(); i++) { if (Peixes[i] == a) { delete Peixes[i]; Peixes.erase(Peixes.begin() + i); return true; } } return false; } string MonstraConteudoAquario() { ostringstream oss; oss << "Peixes no Aquario:" << (int) Peixes.size() << endl; for (int i = 0; i < (int) Peixes.size(); i++) oss << "\t" << Peixes[i]->ObtemNome() << " " << Peixes[i]->ObtemNumeroSerie() << endl; return oss.str(); } }; Ainda não consegui resolver o meu problema.. Alguém pode dizer o que se passa? Edited February 21, 2014 at 01:17 PM by apocsantos
HappyHippyHippo Posted February 6, 2014 at 09:15 PM Report #544287 Posted February 6, 2014 at 09:15 PM (edited) qual a razão da não separação da definição da declaração das classes ? porque não indentas o código ? (eu nunca irei ler um código apresentado dessa maneira) Edited February 6, 2014 at 09:17 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
cenorasped Posted February 6, 2014 at 09:18 PM Author Report #544289 Posted February 6, 2014 at 09:18 PM qual a razão da não separação da definição da declaração das classes ? porque não indentas o código ? (eu nunca irei ler um código apresentado dessa maneira) apenas preguiça... é esse o problema?
HappyHippyHippo Posted February 6, 2014 at 09:19 PM Report #544291 Posted February 6, 2014 at 09:19 PM apenas preguiça... é esse o problema? eu nunca irei ler um código apresentado dessa maneira IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
cenorasped Posted February 6, 2014 at 09:27 PM Author Report #544293 Posted February 6, 2014 at 09:27 PM (edited) class Aquario; class Peixe{ string nome; string cor; int peso; int barriga; int numeroSerie; static int conta; public: Peixe(string Nome, string Cor = "cinzento", int Peso = 10, int tamanoDeAlimentos = 50) : nome(Nome), cor(Cor), peso(Peso), barriga(tamanoDeAlimentos); ~Peixe(){} void alimentase(Aquario *aqu, int quantidade_alimento); int ObtemNumeroSerie(){return numeroSerie;} string ObtemNome(){return nome;} }; int Peixe::conta = 500; void Peixe::alimentase(Aquario *aqu, int quantidade_alimento) { peso += quantidade_alimento; if (peso > barriga) { aqu->removePeixe(this); /// continuo a ter o problema aqui <<<<<---------------------- } } Peixe::Peixe(string Nome, string Cor = "cinzento", int Peso , int tamanoDeAlimentos ) : nome(Nome), cor(Cor), peso(Peso), barriga(tamanoDeAlimentos) { numeroSerie = ++conta; cout << endl << numeroSerie << endl; } class Aquario { string nome; vector < Peixe* > Peixes; public: Aquario(string Nome) :nome(Nome){} ~Aquario(){for (int i = 0; i < (int) Peixes.size(); i++) delete Peixes[i];} void addPeixe(Peixe *a){Peixes.push_back(a);} void alimentarPeixe(int quantidadeAlimento = 5); bool VerificaExistenciaPeixe(int numeroSerie); bool removePeixe(Peixe *a); string MonstraConteudoAquario(); }; bool Aquario::removePeixe(Peixe *a) { for (int i = 0; i < (int) Peixes.size(); i++) { if (Peixes[i] == a) { delete Peixes[i]; Peixes.erase(Peixes.begin() + i); return true; } } return false; } void Aquario::alimentarPeixe(int quantidadeAlimento ) { for (int i = 0; i < (int) Peixes.size(); i++) Peixes[i]->alimentase(this, quantidadeAlimento); } bool Aquario::VerificaExistenciaPeixe(int numeroSerie) { for (int i = 0; i < (int) Peixes.size(); i++) if (Peixes[i]->ObtemNumeroSerie() == numeroSerie) return true; return false; } string Aquario::MonstraConteudoAquario() { ostringstream oss; oss << "Peixes no Aquario:" << (int) Peixes.size() << endl; for (int i = 0; i < (int) Peixes.size(); i++) oss << "\t" << Peixes[i]->ObtemNome() << " " << Peixes[i]->ObtemNumeroSerie() << endl; return oss.str(); } Edited February 21, 2014 at 01:17 PM by apocsantos
HappyHippyHippo Posted February 6, 2014 at 09:41 PM Report #544296 Posted February 6, 2014 at 09:41 PM porque não indentas --------------------------------------------------------------------------- formatar o código de maneira que seja legível através de espaçamentos o código ? --------------------------------------------------------- o teu código eu ------------------------------------------------------ pode ser que com sorte apareça outro nunca irei ler --------------------------------------- se ler código não indentado possa ser chamado de ler ... será mais decifrar um código apresentado dessa maneira --- não indentado ... 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
HappyHippyHippo Posted February 6, 2014 at 10:01 PM Report #544299 Posted February 6, 2014 at 10:01 PM o teu problema é: - estas dentro de um ciclo (a alimentar peixes) <------------ > se o peixe ficar gordo demais > eliminar o peixe > novo ciclo para remover o peixe <---------------- por outras palavras, mexer nos elementos do contentor durante um ciclo é sempre meio caminho andado para dar erro. - primeiro alimenta os peixes (num ciclo fechado) - depois vais ver se necessitas de remover o peixe (num ciclo à posteriori) ps : ciclos com contentores da STL são feitos com iteradores. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now