Ir para conteúdo
Fórum Script Brasil
  • 0

Iniciante Em C++, Uma Duvida Sobre Oo


Guest kakaroto33

Pergunta

Guest kakaroto33

Ola pessoal!

Estou me aventurando a aprender um pouco de c++, e econtrei um

problema que não consegui resolver.

Obs: Meu teclado ainda não esta desconfigurado, acabei de trocar de HD

e reinstalar o Slaskware, por isso não tem acentos.

E o seguinte, estou precisando criar uma matriz de objetos dinamica e não

sei como fazer isso corretamente, so preciso ajuda na funcao DP::addCmd

e ver se o membro _data esta certo. Coloquei quase tudo aqui, se alguém

puder me ajudar fico feliz, se estiver muito errado, pode falar, to aprendendo.. smile.gif

--File: cmd.h ------------------------------------
class DPCmd
{
  
public:
	DPCmd(){};
	DPCmd(char name[]) : _name(name){}
	DPCmd(DPCmd* cmd){copy(cmd);}
	~DPCmd();
	void copy(DPCmd* cmd){setName(cmd->_name);}
	void setName(char name[]);
	char* getName(){return _name;}
	char* _name;

};
-- File:cmd.cpp------------------------------------
#include <string.h>
#include <stdlib.h>
#include "cmd.h"

void DPCmd::setName(char name[])
{
	_name = new char[sizeof(name) + 1];
	strcpy(_name,name);
}

DPCmd::~DPCmd()
{
	delete[] _name;
}
-- File:dp.h -------------------------------------
#include "cmd.h"

class DP
{
	unsigned char _id;
	DPCmd* _data[]; // <-- não sei se esta certo..
	short _size;
	short _counter;
public:
	DP(){_size=2;_counter=0;*_data[0] = new DPCmd*[2];} //<-- aqui tb
	DP(unsigned char id):_id(id){DP();}
	~DP();
	bool addCmd( DPCmd *cmd );
	DPCmd* getCmd( short index );
};
-- File:dp.cpp ----------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dp.h"

DP::~DP(){ } 

bool DP::addCmd( DPCmd *cmd )
{
	/*
	Esta parte esta toda errada, não sei como fazela.
	*/
	if( _counter < _size)
	{
  _data[_counter] = new DPCmd(cmd);
  _counter++;
	}else{
  printf("Increase data into 10 index.\n");
  DPCmd *tmp[_size];
  *_data = new DPCmd[_size+10];
  for(int ct=0; ct<_size; ct++)
  	tmp[ct] = _data[ct];
  delete _data;
  *_data = *tmp;
  _size += 10;
  _counter++;
  
	}
	/*
	Fim da surra.
	*/
	return true;
}

DPCmd* DP::getCmd( short index )
{
//	if( index > _size ) return NULL;
//	return this->data_body[index];
	return NULL;
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Cara, você especificou no seu protótipo que está no .h que este seu método addCmd retorna um valor booleano, então no seu .cpp a função deve ter uma linha return false e outra return true. Pelo que vi, você deve fazer com que a sua função retorne um OBJETO ou um PONTEIRO, não entendi muito a funcionalidade do seu programa. Mais uma coisa: você está guardando ponteiros numa array de ponteiros nesta linha: _data[_counter] = new DPCmd(cmd). Esta linha (DPCmd* _data[]wink.gif você pode especificar também DPCmd ** _data e determinar um tamanho para a sua array de ponteiros, mas não se esqueça que, se for declarar uma variável para isso, ela deve ser const. Qualquer coisa é só postar! wink.gif

OBS.: editei o meu post, parece que você não usou uma array de ponteiros, mas sim uma array de objetos. Em termos de funcionalidade, é melhor usar uma array de ponteiros.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...