Ir ao conteúdo

Erro em C++


Visitante

Posts recomendados

Postado

Tenho um código em C de listas encadeadas, mas preciso passar pra C++ orientado a objetos. É o meu primeiro contato com C++ e tô apanhando :(

 

OBS: onde está "pra mim" é na verdade "p r i m " [sem espaços], não sei porque ele está corrigindo. :huh:

OBS2: editei porque resolvi o primeiro problema e agora surgiu outro rs

 

lista.h

#include <iostream>#include "no.h"class LISTA{ NO *primeiro;NO *ultimo;int tamanho;   public:       LISTA(void);       NO * getPrimeiro();       void setPrimeiro(NO *pra mim);              NO * getUltimo();       void setUltimo(NO *ult);              void setTamanho(int tamanho);       int getTamanho();              LISTA *CriarLista();};

lista.cpp

#include "lista.h"#include "no.h"using namespace std;LISTA::LISTA(){   }void LISTA::setPrimeiro(NO *pra mim){    primeiro = pra mim;}NO * LISTA::getPrimeiro(){     return(primeiro);}void LISTA::setUltimo(NO *ult){    ultimo = ult;}NO * LISTA::getUltimo(){     return(ultimo);}void LISTA::setTamanho(int tam){    tamanho = tam;}int LISTA::getTamanho(){     return(tamanho);}//  Erro nesse método no `LISTA* LISTA::CriarLista()' member function declared in class `LISTA' LISTA * LISTA::CriarLista(){      LISTA *lista;      lista->setPrimeiro(NULL);      lista->setUltimo(NULL);      lista->setTamanho(0);            return lista;} 
 

alguém poderia dizer o que estou fazendo de errado? obrgd  ;)

Postado

posta o no.h

 

se for algum conflito de declaração  com no.h eu nao tenho como saber,se for a função em si ta errada ja que o ponteiro "*lista" vai ser destruido no final da função,e vai retornar nada,voce tem que alocar memória para ele pra poder usa-lo fora da função

Postado

no.h

#include <iostream>class NO{    int numero;    NO * proximo;    NO * anterior; public:    NO();    int get();    void set(int num);        void setProximo(NO *prox);    NO * getProximo();        void setAnterior(NO *ant);    NO *  getAnterior();        void setNumero(int numero);    int getNumero();    ~NO();};

O erro que aparecia era esse `LISTA* LISTA::CriarLista()' member function declared in class `LISTA' 

Em lista.h, fiz a alteração   LISTA &criarLista();  e não deu mais erro, mas ainda fiquei na dúvida se isso está certo.

o trecho em C é esse, preciso passar pra c++ OO

LISTA *Criar_lista(){	LISTA *lista = malloc(sizeof(LISTA));	lista->primeiro = NULL;	lista->ultimo = NULL;	lista->tamanho = 0;	return lista;} 
Postado

sim mas em C++ geralmente se usa o operador new..

Quanto a trocar o ponteiro por referencia &,nao,isso provavelmente era outro erro

Postado

ficaria assim?

LISTA * LISTA::criarLista(){      LISTA *lista = new LISTA();      lista->setPrimeiro(NULL);      lista->setUltimo(NULL);      lista->setTamanho(0);      return (lista);}

não é errado eu instanciar um objeto da classe Lista dentro dela própria?
obrigada  :)

Postado

ficaria "LISTA *lista = new LISTA"

na verdade voce nao ta instanciando um objeto dentro da classe,esse tipo de função é usada mais em funções "clone" que retornam um ponteiro para a mesmo tipo da classe com os valores atuais dos membros da classe  e o programa chamador é quem é o responsavel pela liberação da memória

Postado

obrigada, atlos!  
mais uma dúvida, tenho a seguinte struct em C

typedef struct struct_hash{    struct struct_hash *anterior;    struct struct_hash *proximo;    int minimo;    int maximo;    LISTA *lista;} HASH;

passando pra c++, 


#include "lista.h"class HASH{    int minimo;    int maximo;    HASH * proximo;    HASH * anterior;    LISTA *lista;  public:    HASH();    void setLista(LISTA *list);    LISTA * getLista();

A parte de criar um atributo do tipo LISTA, está correta?  :confused: 
Apareceram os erros:


redefinition of `class LISTA' 
previous definition of `class LISTA' 
Postado

isso é porque voce ta incluindo mais de uma vez a mesma classe(lista.h)no mesmo módulo,se tiver usando o visual C++ usa a diretiva #pragma once, no topo do módulo de lista.h,isso diz pro compilador montar o módulo só uma vez indepedente de quantas vezes ele é incluido em outros módulos

 

voce pode procurar saber sobre diretivas #ifdef pra criar definições e só instanciar um módulo quando ele ainda nao foi instanciado

acho que o ideal agora seria voce definir as funções de uma classe no mesmo módulo do header ou dentro da própria classe,pra evitar esses tipos de problemas secundarios..

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!