Archivos de cabecera

Imagen de nemo_mirg
0 puntos

Saludos, mi nombre es Nemo y tengo el siguiente programa en c++ uso el IDE Geany para compilar
programa


//main_tiempo.cpp
#include <iostream>
#include "Tiempo.h"
using namespace std;
int main(){
Tiempo horaCena;
horaCena.DefineTiempo(18,30,0);
cout <<"La cena se serviara a las ";
horaCena.ImprimeUniversal();
cout <<"en hora universal, \nla cual es ";
horaCena.ImprimeEstandar();
cout <<"en hora estandar.\n";
horaCena.hora(29);
horaCena.minuto(73);
cout <<"\nHora con valores no valiqdos: ";
horaCena.ImprimeUniversal();
cout <<endl;
}
///Tiempo.h definicion de mi clase
#ifndef _TIEMPO_H
#define _TIEMPO_H
class Tiempo{
protected:
int _Hora;
int _Minuto;
int _Segundo;
public:
Tiempo();
void hora (int);
int hora (void);
void minuto (int);
int minuto (void);
void segundo (int);
int segundo (void);
void DefineTiempo(int,int,int);
void ImprimeUniversal (void);
void ImprimeEstandar (void);
};
#endif
implementacion

///Tiempo.cpp
#include <iostream>
#include <iomanip>
#include "Tiempo.h"
using namespace std;
Tiempo::Tiempo(void){
_Hora=_Minuto=_Segundo=0;
}
void Tiempo::hora (int valor){
_Hora=(valor>=0&&valor<=24)?valor:0;
}
int Tiempo::hora (void){
return _Hora;
}
void Tiempo::minuto (int valor){
_Minuto=(valor>=0&&valor<=60)?valor:0;
}
int Tiempo::minuto (void){
return _Minuto;
}
void Tiempo::segundo (int valor){
_Segundo=(valor>=0&&valor<=60)?valor:0;
}
int Tiempo::segundo (void){
return _Segundo;
}
void Tiempo::DefineTiempo(int h,int m,int s){
hora(h);
minuto(m);
segundo(s);
}
void Tiempo::ImprimeUniversal (void){
cout<<setfill('0')<<setw(2)<<_Hora<<":"<<setw(2)<<_Minuto<<":"<<setw(2)<<_Segundo;
}
void Tiempo::ImprimeEstandar (void){
cout << (( _Hora==0||_Hora==12)?12:_Hora%12)<<":"<<setfill('0')<<setw(2)<<_Minuto<<":"<<setw(2)<<_Segundo<<(_Hora<12? " AM":" PM");
}


y me marca el siguiente error

main_Tiempo.cpp:(.text+0x74): undefined reference to `Tiempo::Tiempo()'

he compilado y ejecutado este programa en CodeGear (esto en windows ) y no marca ningún error, me imagino que es por los archivos de cabecera, he leído respecto a las librerías y he generado una dinámica y una estática a partir de Tiempo pero resulta el mismo error, quizas he echo mal las librerías en todo caso agradeseria su ayuda

Imagen de nemo_mirg
+1
0
-1

en un foro he encontrado esta respuesta para el mismo problema


Ah, ya veo, que tratabas de separar la definición de la implementación, como con las clases normales.

No puedes, debes ponerlo todo en el .h

Tal cual lo haces ahora, al compilar el ParDe.cpp, g++ no ve ningún uso del método y no genera ninguna especialización; y después el linker no la encuentra.


Pero yo he hecho siempre mis librerías de la esta forma (según esto para proteger cierta parte del código,tal como me lo han enseñado )

definiciones.h

implementacion de mis definiciones.cpp

mi main

claro esto en CodeGear y mi pregunta es la manera que lo hago es la errónea. Siempre tendré que poner las definiciones y la implementacion en el .h, y si esto es así como protejo esa parte del codig

+1
0
-1
Imagen de nemo_mirg
+1
0
-1

he encontrado otras paginas donde hacen lo que yo pienso separan la definicion de la implementacion entonces estoy haciendo algo mal que es

seguire buscando

+1
0
-1
Imagen de slap
+1
0
-1

Código editado.
Cuando escribáis los símbolos: < y > en un post, debéis usar los botones que existen para ello en el editor que proporciona la web. Si no lo hacéis así, estos caracteres no se visulaizarán bien y ocultarán parte del texto porque son considerados etiquetas HTML no permitidas.

También es conveniente seleccionar el bloque de código y pulsar en el botón "Code" para que se mantengan las tabulaciones o espacios en el código.

Por ejemplo,
Esto saldrá mal:

#include

int main(void){
printf("Hello world!\n");
}

y esto bien:

#include <stdio.h>

int main(void){
  printf("Hello world!\n");
}

Saludos.

Equipo de Ubuntu-es

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de slap
+1
0
-1

He probado tu código compilándolo con g++ y funciona correctamente.
En el directorio "pruebas" tengo los ficheros:

main_tiempo.cpp
Tiempo.h
Tiempo.cpp

Compilo con:

g++ -o main main_tiempo.cpp Tiempo.cpp

Y ejecuto:

./main

Salida del programa:

La cena se serviara a las 18:30:00en hora universal, 
la cual es 6:30:00 PMen hora estandar.

Hora con valores no valiqdos: 00:00:00

El problema lo debes tener en la configuración del IDE.

Saludos.


0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://7grados.injiniero.es

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de nemo_mirg
+1
0
-1

tanto por corregir mi post y por la respuesta

+1
0
-1