aqui no meu projeto do dev c++ (pra windows) tenho uma classe q tem o seguinte metodo:
public : opcao* NovaOpcao(area* ax, SDL_Surface* h, int offx, int offy) { opcao* r;
if (ooo == NULL) //Primeira área a ser adicionada. { // ooo = (lista_ligada<opcao>*)malloc(sizeof(lista_ligada<opcao>)); ooo = new lista_ligada<opcao>; //<-- não FUNCIONA ooo->item = opcao(ax, h, offx, offy); ooo->l = NULL; qtde = 1;
//ColocaFoco(&(ooo->item)); foco = &(ooo->item);
r = &(ooo->item); } else { lista_ligada<opcao>* ppp = ooo; while (ppp->l != NULL) { ppp = ppp->l; } // ppp->l = (lista_ligada<opcao>*)malloc(sizeof(lista_ligada<opcao>)); ppp->l = new lista_ligada<opcao>; //<-- não FUNCIONA ppp->l->item = opcao(ax, h, offx, offy); ppp->l->l = NULL; qtde++;
r = &(ppp->l->item); }
return r; }[/code]
o ooo esta declarado assim:
[code]protected : lista_ligada<opcao>* ooo;
porque não consigo alocar o espaco com o new nas duas linhas mostradas??
a estrutura da lista ligada é a seguinte:
template <class T> typedef struct lista_ligada { T item; lista_ligada* l; };[/code]
ele diz q:
no matching function for call to `lista_ligada<opcao>::lista_ligada()'
candidates are: lista_ligada<opcao>::lista_ligada(const lista_ligada<opcao>&)
se eu faco com o malloc (linha comentada logo acima da linha do erro) da tudo certo.
sei q o template não tem nd a ver, mas acho q o problema ta na classe opcao, porque se eu passo qualquer outra classe pro template da lista ligada funciona normal. inclusive numa outra classe tenho essa mesma lista ligada com um metodo q faz essa alocacao tb, so q pra uma classe diferente da classe opcao e funciona normal.
tentei de teste criar uma lista exclusiva pra classe opcao:
declarar o ooo como pontiero desse struct e fazer a alocacao com o new, mas deu o mesmo erro.
a definicao da classe opcao é a seguinte:
class opcao { public : area* Area; //Área da tela onde está a opção.
public : opcao* Baixo; //Para qual opção irá ao ser pressionado para baixo. public : opcao* Cima; //Para qual opção irá ao ser pressionado para cima. public : opcao* Esquerda; //Para qual opção irá ao ser pressionado para a esquerda. public : opcao* Direita; //Para qual opção irá ao ser pressionado para a direita.
//Para alinhar o highlight à área. public : int offset_x; public : int offset_y;
public : SDL_Surface* highlight_img; //Imagem que circundará a opção em highlight;
public : opcao(area* ax, SDL_Surface* h, int offx, int offy) { Area = ax; highlight_img = h;
sera q o monte de ponteiro pra mesma classe dentro dela mesma tem algo a ver??
bom, não sei se alguém vai saber resolver, de qualquer modo ele funciona td certinho com o malloc(), mas sempre me falaram q devo usar new e não malloc(), e queria saber por q motivo o new não esta funcionando...
Pergunta
kuroi
aqui no meu projeto do dev c++ (pra windows) tenho uma classe q tem o seguinte metodo:
porque não consigo alocar o espaco com o new nas duas linhas mostradas?? a estrutura da lista ligada é a seguinte: declarar o ooo como pontiero desse struct e fazer a alocacao com o new, mas deu o mesmo erro. a definicao da classe opcao é a seguinte:Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
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.