Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Llamada de funciones/métodos en otras clases

Estas en el tema de Llamada de funciones/métodos en otras clases en el foro de C/C++ en Foros del Web. Bueno tengo este código en "Evento.cpp" (ya lo probé, sirve) #include <iostream> #include <string.h> #include "Evento.h" using namespace std; Evento::Evento(char *productora, float precio, short descripcion, ...
  #1 (permalink)  
Antiguo 01/08/2011, 21:31
 
Fecha de Ingreso: agosto-2011
Mensajes: 4
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Llamada de funciones/métodos en otras clases

Bueno tengo este código en "Evento.cpp" (ya lo probé, sirve)


#include <iostream>
#include <string.h>
#include "Evento.h"

using namespace std;

Evento::Evento(char *productora, float precio, short descripcion, int ID)
{
this->precio = precio;
this->ID = ID;
this->_Productora = NULL;
this->descripcion = descripcion;
this->setProductora(productora);
}

Evento::~Evento()
{
free(this->_Productora);
}

char *Evento::getProductora()
{
return this->_Productora;
}

void Evento::setProductora(char *productora)
{
if (this->_Productora) free(this->_Productora);
this->_Productora = (char *) calloc(strlen(productora) + 1, sizeof(char));
strcpy(this->_Productora, productora);
}

float Evento::setPrecio(float precio)
{
cout << endl;
cout << "Establezca un precio estandar para todos los eventos del sistema" << endl;
cout << endl;
cin >> precio;
return precio;
}


Luego tengo otro cpp: "Menu.cpp" y necesito llamar a la función setPrecio en Menu.cpp, pero me sale que setPreciio es un identificador no declarado. Ya puse un #include "Evento.h" en Menu.cpp y ni así reconoce el identificador :(

La función setPrecio es pública.
  #2 (permalink)  
Antiguo 02/08/2011, 09:58
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 12 años, 1 mes
Puntos: 228
Respuesta: Llamada de funciones/métodos en otras clases

Primero de todo deberias crear un objeto del tipo Evento. Luego llamas al metodo setprecio de ese objeto.

Ademas deberias mostrar el Menu.cpp para ver como estas haciendo las cosas. Tambien el error que te da. A lo mejor no estas compilando las cosas como corresponde.

Saludos
  #3 (permalink)  
Antiguo 02/08/2011, 17:13
 
Fecha de Ingreso: agosto-2011
Mensajes: 4
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Llamada de funciones/métodos en otras clases

Este es Menu.cpp

#include <iostream>
#include <string.h>
#include "Menu.h"
#include "Evento.h"
#include "Concierto.h"
#include "ObraTeatro.h"
#include "Partido.h"

using namespace std;

int Menu::ContadorIDs = 1;
int Menu::ContadorInstancias = 0;

Menu::Menu()
{
Menu::ContadorInstancias++;
Menu::ContadorIDs++;
}

Menu::~Menu()
{
Menu::ContadorInstancias--;
}

void Menu::menuPrincipal(Registro *registro)
{
int respond = 0;
int ID = 0;
system("cls");
cout << endl;
cout << "Bienvenido al sistema de boleteria digital" << endl;
cout << endl;
cout << "Nota: Solo el administrador tiene derecho a crear modulos"
<< "y el cliente solo se limita a comprar" << endl;
cout << endl;
system("pause");
system("cls");
cout << endl;
cout << "Es usted el administrador o el cliente?" << endl;
cout << "1. Administrador" << endl;
cout << "2. Cliente" << endl;
cout << "3. Salir del sistema" << endl;
cout << endl;
cout << "Su opcion: ";
cin >> respond;

switch (respond)
{
case 1:
moduloEvento(registro);
break;

case 2:
cout << endl;
break;
case 3:
return;
default:
{
cout << endl;
cout << "Opcion erronea" << endl;
cout << endl;
system("pause");
exit(0);
}
}
}

void Menu::moduloEvento(Registro *registro)
{
system("cls");
short op = 0;
float precio = 0;
cout << endl;
cout << "OPCIONES DEL ADMINISTRADOR:" << endl;
cout << endl;
cout << "MODULO EVENTOS:" << endl;
cout << endl;
cout << "Seleccione opcion" << endl;
cout << "1. Crear Evento" << endl;
cout << "2. Imprimir cantidad de eventos" << endl;
cout << "3. Salir del sistema" << endl;
cout << endl;
cout << "Su opcion: ";
cin >> op;

switch(op)
{
case 1:
CrearEvento(registro);
break;
case 2:
{
cout << endl;
cout << "El sistema cuenta con " << registro->Eventos.ContarNodos() << " eventos por el momento" << endl;
cout << endl;
system("pause");
menuPrincipal(registro);
break;
}
case 3:
return;
default:
{
cout << endl;
cout << "Opcion erronea" << endl;
cout << endl;
system("pause");
exit(0);
}
}
}

void Menu::CrearEvento(Registro *registro)
{
float precio = 0;
system("cls");
cout << endl;
cout << "Establezca el evento que desea crear:" << endl;
cout << endl;
cout << "1. Concierto" << endl;
cout << "2. ObraTeatro" << endl;
cout << "3. Partido" << endl;
cout << "4. Volver al menu principal" << endl;
cout << "5. Salir del sistema" << endl;
cout << endl;
int (descripcion_int) = this->CapturarEntero("Su opcion");
enum DESCRIPCION descripcion;

switch(descripcion_int)
{
case 1:
descripcion = DESCRIPCION::CONCIERTO;
break;
case 2:
descripcion = DESCRIPCION::OBRA_TEATRO;
break;
case 3:
descripcion = DESCRIPCION::PARTIDO;
break;
case 4:
menuPrincipal(registro);
break;
case 5:
return;
default:
{
cout << endl;
cout << "Opcion erronea" << endl;
cout << endl;
system("pause");
exit(0);
}
}

system("cls");
cout << endl;
cout << "DATOS:" << endl;
setPrecio();
cout << endl;
int ID = ContadorIDs++;
cout << "ID: " << ID << endl;
char productora [1000];
this->CapturarString("Productora", productora);
Evento *evento = NULL;

switch(descripcion)
{
case DESCRIPCION::CONCIERTO:
{
char artista[500];
this->CapturarString("Artista principal", artista);
char telonero[500];
this->CapturarString("Artista telonero", telonero);
char gmusical[100];
this->CapturarString("Genero musical", gmusical);
evento = new Concierto(productora, artista, telonero, gmusical, precio, descripcion, ID);
break;
}
case DESCRIPCION::OBRA_TEATRO:
{
char company[1000];
this->CapturarString("Nombre de la compania de teatro", company);
char gteatral[100];
this->CapturarString("Genero teatral", gteatral);
evento = new ObraTeatro(productora, company, gteatral, precio, descripcion, ID);
break;
}
case DESCRIPCION::PARTIDO:
{
cout << endl;
system("pause");
system("cls");
cout << endl;
cout << "Escoja el tipo de partido:" << endl;
cout << endl;
cout << "1. Amistoso" << endl;
cout << "2. Eliminatoria" << endl;
cout << "3. Volver al menu principal" << endl;
cout << "4. Salir del sistema" << endl;
cout << endl;
int (tipo_int) = this->CapturarEntero("Su opcion");
enum TIPO tipo;

switch (tipo_int)
{
case 1:
tipo = TIPO::AMISTOSO;
break;
case 2:
tipo = TIPO::ELIMINATORIA;
break;
case 3:
menuPrincipal(registro);
break;
case 4:
return;
default:
cout << endl;
cout << "Opcion erronea" << endl;
cout << endl;
system("pause");
exit(0);
}

char home[200];
this->CapturarString("Equipo casa", home);
char visitor[200];
this->CapturarString("Equipo visitante", visitor);
evento = new Partido(productora, home, visitor, precio, descripcion, tipo, ID);
break;
}
}
registro->Eventos.Agregar(evento);
}

int Menu::CapturarEntero(char *param)
{
int entero = 0;
cout << endl;
cout << param << ": ";
cin >> entero;
return entero;
}


~~~~~~~~~~~~~~~~~~~~~~
Tira un error que setPrecio no esta declarado =S
  #4 (permalink)  
Antiguo 02/08/2011, 20:39
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 12 años, 1 mes
Puntos: 228
Respuesta: Llamada de funciones/métodos en otras clases

Fijate vos llamas a setprecio asi como si nada. Osea libre. Y este no es un funcion cualquiera es un metodo de una libreria.

setprecio tiene que estar asociado a un obejte tipo evento o alguno que herede de esta clase. Ejemplo:

evento = new Partido(productora, home, visitor, precio, descripcion, tipo, ID);
evento->setPrecio();

Etiquetas: c++, clase, funcion, identificador, llamada, metodo, poo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:28.