[C con Clase] Problema de compilación en una función con punteros
redondo.af
redondo.af en gmail.com
Mar Mayo 1 21:05:37 CEST 2012
Buenas tardes:
Estoy implementado una cola y tengo un error en la compilación cuando defino en la clase clsNodo.cpp la función:
void nodo::setSiguiente(nodo &val)
{ this->siguiente = val; }
Los errores son:
19 clsNodo.cpp prototype for `void nodo::setSiguiente(nodo&)' does not match any in class `nodo'
17 clsCola.h void nodo::setSiguiente(nodo)
19 clsNodo.cpp In member function `void nodo::setSiguiente(nodo&)'cannot convert `nodo' to `nodo*' in assignment
Os pongo a continuación el código correspondiente a las distintas clases que forman el programa.
Antes de nada dar las gracias a Steven por su aportación a este foro, sin ella yo no hubiese podido llegar hasta aquí. ;-)
Ahí vamos con el código....
****************************************************************************************************************
******main.cpp
#include "clsCola.h"
#include "procesos.h"
int main(int argc, char *argv[])
{
int op, opsub;
cola Cola;
do
{
op = mostrarMenuMain();
switch (op) //hace casting automatico a int p
{
case 0:
cout <<"\n\t > ¡Adios!\n";
break;
case 1: // practica1 = Cola
do{
opsub = mostrarMenuCola();
tratarOpcionCola(opsub, Cola);
}while(opsub!=0);
break;
case 2: // practica 2
cout << "\n\t > practica2\n";
break;
case 3: // practica 3
cout << "\n\t > practica3\n";
break;
}
}while(op!= 0);
system("PAUSE");
return EXIT_SUCCESS;
}
***************************************************************************************************************
*********clsCola.h
#ifndef CLSCOLA_H
#define CLSCOLA_H
class nodo {
public:
nodo(int v, nodo *sig = NULL)
{
valor = v;
siguiente = sig;
}
int getValor();
void setValor(int);
nodo getSiguiente();
void setSiguiente(nodo);
private:
int valor;
nodo *siguiente;
friend class cola;
};
typedef nodo *pNodo;
class cola {
public:
cola(); // : primero(NULL), ultimo(NULL) {}
~cola();
pNodo getPrimero();
void setPrimero(pNodo);
pNodo getUltimo();
void setUltimo(pNodo);
bool esVacia();
void anadir(int p);
void borrar();
int consPrimero(pNodo nodoCola);
void recorrer();
// void insertar(string nombre,tProductos productos);
private:
pNodo primero, ultimo;
int total;
};
typedef cola *pCola;
#endif
***************************************************************************************************************
*********clsCola.cpp
#include <cstdlib>
#include <iostream>
using namespace std;
#include "clsCola.h"
cola::cola() { primero=NULL; ultimo=NULL;}
cola::~cola(){}
pNodo cola::getPrimero()
{ return this->primero; }
void cola::setPrimero(pNodo prim)
{ this->primero = prim; }
pNodo cola::getUltimo()
{ return this->ultimo; }
void cola::setUltimo(pNodo ult)
{ this->ultimo = ult; }
bool cola::esVacia()
{
return (primero==NULL && ultimo==NULL);
}
void cola::anadir(int ped)
{
pNodo nuevo;
nuevo = new nodo(ped);
if(esVacia()) //si esta vacia se asigna a la cabecera
{
primero=nuevo;
ultimo=nuevo;
}
else
{
ultimo->siguiente = nuevo;
ultimo=nuevo;
}
}
void cola::borrar()
{
pNodo aux;
aux=primero;
primero= aux->siguiente;
aux->siguiente=NULL;
// Si primero es NULL es que había un único elemento
if (primero==NULL){
ultimo=NULL;
}
}
}
***************************************************************************************************************
*******procesos.h
#ifndef PROCESOS_H
#define PROCESOS_H
int mostrarMenuMain();
int mostrarMenuCola();
void recorrerCola(cola &b);
void tratarOpcionCola(int a, cola &b);
#endif
***************************************************************************************************************
******procesos.cpp
#include <string>
using std::string;
#include <iostream>
using std::cin;
using std::cout;
#include "clsCola.h"
#include "procesos.h"
int mostrarMenuMain (){
int op;
system("cls");
cout <<"\n Prácticas de Estructura de datos 2011/2012 ";
cout <<"\n ------------------------------------------------";
cout <<"\n 1. Práctica 1: Colas";
cout <<"\n 2. Práctica 2: Listas";
cout <<"\n 3. Práctica 3: Árboles";
cout <<"\n ";
cout <<"\n 0. Salir";
cout <<"\n\n Opción: ";
cin >> op;
return op;
}
int mostrarMenuCola(){
int op;
system("cls");
cout << "\n Gestión de Colas de Pedidos";
cout <<"\n -----------------------------------------";
cout <<"\n ";
cout <<"\n 1. Añadir un pedido a cola";
cout <<"\n 2. Servir el primer pedido de la cola";
cout <<"\n 3. Consultar el primer pedido en cola";
cout <<"\n 4. Determinar si hay pedidos pendientes en cola";
cout <<"\n ";
cout <<"\n 0. Salir";
cout <<"\n\n Opcion: ";
cin >> op;
return op;
}
void recorrerCola(cola &vlCola){
pNodo actual, fin;
int valor;
actual=vlCola.getPrimero();
fin=vlCola.getUltimo();
while (actual!=fin){
cout << "\n nº pedido = ";
// valor= vlCola.consPrimero(actual);
cout << valor;
// actual=actual->siguiente;
}
/* cout << "\n nº pedido = ";
cout << actual->valor; */
}
//void tratarOpcionCola(int op){ //falta cola de tipo cola
void tratarOpcionCola(int op, cola &vlCola){ //falta cola de tipo cola
int num_ped;
char resp;
switch (op) //hace casting automatico a int p
{
case 0:
cout <<"\n\t > ¡Vuelves al menú principal!\n";
system("PAUSE");
break;
case 1: // practica1 = Cola
system("cls");
cout <<"\n pedido: ";
cin >> num_ped;
vlCola.anadir(num_ped);
break;
case 2: // practica 2
if (vlCola.esVacia()){
cout <<"\n No hay pedidos en cola";
cout <<"\n";
} else{
system("cls");
cout <<"\n Va a borrar el primer pedido de la cola.";
cout <<"\n¿Desea continuar? S/N: ";
cin >> resp ;
if ((resp== 'S') && (resp=='s')){
vlCola.borrar();
}else{
}
}
// if (resp=='S'){}
break;
case 3: // practica 3
printf ("\n\t > practica3\n");
break;
case 4: // Determinar si hay pedidos pendientes
system("cls");
if (vlCola.esVacia()){
cout <<"\n No hay pedidos pendientes en cola";
cout <<"\n";
} else
{ cout <<"\n Existen los siguientes pedidos pendientes:";
cout <<"\n" ;
// vlCola.recorrer();
recorrerCola(vlCola);
}
system("PAUSE");
break;
}
}
**************************************************************************************************************
************ clsNodo.cpp
#include <cstdlib>
#include <iostream>
using namespace std;
#include "clsCola.h"
int nodo::getValor()
{ return this->valor; }
void nodo::setValor(int val)
{ this->valor = val; }
nodo nodo::getSiguiente()
{ return *siguiente; }
void nodo::setSiguiente(nodo &val)
{ this->siguiente = val; }
Más información sobre la lista de distribución Cconclase