Buenas! con este titulo tan simpático presento mi problema que me tiene loco hace unos dias. Resulta que hace rato que no programo en C++ y más en linux, asi q decidí volver al ruedo con una clase Racionales.
Racional.cpp, Racional.hpp, mainRacionales.cpp (dnd puse un main y algunas pruebas)
En Racional estan las funciones de toda la vida (unos constructores, operator+, operator+=, etc)
Lo más dificil que tiene es operator<<
Cuando voy a compilar mainRacionales.cpp me dice q las referencias a Racional no están. Con lo cual entiendo que no esta pudiendo compilar Racional.cpp
Entonces compilo Racional.cpp y me sale lo siguiente:
Ejecuto
"g++ -o Raci Racional.cpp"
Código:
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 0 tiene un índice de símbolo 11 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 1 tiene un índice de símbolo 12 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 2 tiene un índice de símbolo 2 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 3 tiene un índice de símbolo 2 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 4 tiene un índice de símbolo 11 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 5 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 6 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 7 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 8 tiene un índice de símbolo 12 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 9 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 10 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 11 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 12 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 13 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 14 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 15 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 16 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 17 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 18 tiene un índice de símbolo 13 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): la reubicación 19 tiene un índice de símbolo 21 inválido
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): la reubicación 0 tiene un índice de símbolo 2 inválido
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: En la función `_start':
(.text+0x20): referencia a `main' sin definir
collect2: error: ld returned 1 exit status
No pude encontrar en ningún lado que significa: "la reubicación % tiene un índice de símbolo % inválido",
Alguien tiene alguna minima idea de que pasa? Puede ser que este usando mal el compilador, o algo muy tonto. O que el compilador me odie.
Sigo: probe tmb con el gcc, y pasa lo mismo. Probe dejando y sacando el namespace std y los #include de Racional.h y es lo mismo. Tambien cambiando .hpp por .h xD
Incluso solamente deje en la clase el constructor y un Racional::display() y pasa lo mismo.
Código:
/**
Racional.cpp
*/
#include <iostream>
#include <cmath>
#include "Racional.hpp"
using namespace std;
Racional::Racional()
{
Num = 0;
Den = 1;
}
Racional::Racional(long numerador, long denominador)
{
Num = numerador;
Den = denominador;
normalizar(*this);
}
Racional::Racional(const Racional &copia)
{
Num = copia.Num;
Den = copia.Den;
//copia ya esta normalizada, asi q no necesito repetir la operacion.
}
/**
mainRacional.cpp
*/
#include <iostream>
#include "Racional.hpp"
using namespace std;
int main()
{
Racional a(4,5);
Racional b(9,3);
Racional c;
cout << "4/5 = ";
a.display();
return 0;
}