Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
AnaCal

alocaçao dinamica duvida

Recommended Posts

AnaCal

Criei varias instancias de uma classe (com varios metodos, entre eles o gettempoespera() ) e guardei as num vector

inst_cliente= new Cliente();										
                vector_Clientes.push_back(inst_cliente);			

so que ao tentar aceder aos valores guardados o programa da o seguinte erro 'debug assertion failed!' o meu codigo foi o seguinte

for(int i = 0; i <= vector_Clientes.size(); i++)
	cout << "os tempos de recolha sao " << vector_Clientes[i]->gettempoespera();

como posso aceder aos dados guardados no meu vector? os exemplos que encontrei no google eram deste tipo  :cheesygrin:

Share this post


Link to post
Share on other sites
pmg

Nao analisei o teu codigo mais do que o AHA!

for(int i = 0; i <= vector_Clientes.size(); i++)
//               ^^ AHA! Isto nao e usual: talvez esteja aqui o erro ? ??
//               O usual e for (i = 0; i < limite; i++)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
AnaCal

Nao defini limite no vector, por isso pensei que atraves do tamanho podia fazer o ciclo. Como posso fazer?

Share this post


Link to post
Share on other sites
pmg

Em vez do "<=" experimenta um simples "<".

O problema do "<=" e que vai aceder a um elemento a mais. Imagina que tens 2 elementos no vector: com "<=" o i vai ser 0, depois 1, e depois 2 (num total de 3 passagens no ciclo) e vai tentar aceder ao elemento vector_Clientes[2], que nao existe (os 2 que existem sao o vector_Clientes[0] e vector_Clientes[1])


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
AnaCal

Oh muito obrigad! Ja estava desesperando, agradeço imenso ter respondido ao post.  :(

Cumprimentos

Share this post


Link to post
Share on other sites
AnaCal

Saberia me dizer porque neste ciclo apenas é modificado o ultimo valor em vez de todos?  🤔

for(int i = 0; i < vector_Clientes.size(); i++){
	cout << "TEMPOS ANTERIORES " << vector_Clientes[i]->getnovotempoRecolha() << endl;
	vector_Clientes[i]->actualizatempoRecolha(1);
}

os meus metodos sao

void Cliente::actualizatempoRecolha(int n)
{
	this->novotempoRecolha = gettempoRecolha() - n;
}

int Cliente::getnovotempoRecolha()
{
	return this->novotempoRecolha;
}

Share this post


Link to post
Share on other sites
KTachyon

O que faz o teu gettempoRecolha()?


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
KTachyon

Isso é o getnovotempoRecolha(). Tens lá outra função que é gettempoRecolha().

EDIT: E qual e a diferença entre o teu novotempoRecolha e o tempoRecolha? Será que os novotempoRecolha já não são todos iguais a tempoRecolha - 1?


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
AnaCal

void Cliente::actualizatempoRecolha(int n)
{
	this->novotempoRecolha = novotempoRecolha - n;
}

int Cliente::getnovotempoRecolha()
{
	return this->novotempoRecolha;
}

void Cliente::settempoRecolha(int n)
{
	this->tempoRecolha=n;
}

int Cliente::gettempoRecolha()
{
	return this->tempoRecolha;
}

utilizo o metodo actualiza tempo de recolha como decremento da variavel

Share this post


Link to post
Share on other sites
KTachyon

Mas já alteraste? É que já apresentaste duas versões diferentes do código:

void Cliente::actualizatempoRecolha(int n)
        {
                this->novotempoRecolha = novotempoRecolha - n;
        }

void Cliente::actualizatempoRecolha(int n)
        {
                this->novotempoRecolha = gettempoRecolha() - n;
        }


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.