Título: Undefined reference to (C++) [SOLUCIONADO]
Publicado por: Eskizoide en 30 Octubre 2017, 11:40 am
Buenas, yo había hecho un proyecto con 3 clases, menu.cpp y otras dos clases. Mi error fue escribir todo el código de las otras dos clases en un fichero .h y no separar los ficheros. Bien, fui a separar los ficheros en cabeceras y tal, las declaraciones en .hpp y el codigo en .cpp, y al pasarlo todo, no me da ningún fallo excepto en el menu.cpp donde me salta un "undefined reference" a todas las funciones que he separado en ficheros. Y me estoy volviendo loco porque no se como hacer que funcione. Se que les declaraciones y eso están bien, pero ya no se que más falla. Intenté solucionarlo poniendo #pragma once pero nada sigue igual. A ver si algún alma muy caritativa me ayuda, o al menos me explica que puede estar pasando. Venga, dejo el código fuente aquí en spoiler por si alguien es mu majete y le echa un vistazo NFA.hpp #pragma once #include <vector> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <fstream> #include "estado.hpp" #include <set> #include <string> using namespace std; class nfa { vector <ESTADO> vectorestado; int numeroestados; set <char> alfabeto; set <int> importantes; int estadoinicial; public: void llenar_datos(char nombrefichero[], bool& errorapertura); void mostrar(); void crearalfabeto(int numeroenlaces); void analizarmuerte (); void mostraralfabeto(); void estadosimportantes(); bool comprobacionestadodfa(); bool analizarletra (string cadena, int estado, int &camino, vector<int> &estadoactual,vector <char> &simbolo, vector <int> &estadosiguiente); void analizarcadena(); }; ESTADO.hpp #pragma once #include <vector> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <fstream> using namespace std;
class ESTADO {struct siguienteestado_t {char simbolotransicion; int siguienteestado; }; bool aceptacion; bool estadomuerto; vector <siguienteestado_t> transicion; public: void crearenlace (int numeroenlaces); void set_sigestado (int estado, char simbolo, int pos); int get_sigestado(int pos) const; char get_simbolo(int pos) const; bool get_aceptacion(void) const; void set_aceptacion(bool aceptado); bool get_muerto(void) const; bool nodomuerto(int identificador); int get_numeroenlaces(void) const; }; MENU.cpp #include "nfa.hpp" #include <stdio.h> #include <stdlib.h> #include <iostream> int main() { int opcion; char fichero[85]; bool errorapertura; // 0 si se abrio el fichero, en otro caso, no se abrio nfa automata; do{ cout << endl; cout << "SELECCIONE UNA OPCION :" << endl; cout << "[1] Leer un archivo .nfa." << endl; cout << "[2] Mostrar NFA." << endl; cout << "[3] Señalizar estados de muerte." << endl; cout << "[4] Mostrar estados importantes." << endl; cout << "[5] Analizar cadena." << endl; cout << "[6] Comprobacion DFA." << endl; cout << "[0] Salir." << endl; cout << "OPCION: "; cin >> opcion; switch(opcion) {case 1: {cout << "Nombre del fichero: "; cin >> fichero; automata.llenar_datos(fichero, errorapertura); break; } case 2: {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl; else automata.mostrar(); break; } case 3: {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl; else automata.analizarmuerte(); break; } case 4: {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl; else automata.estadosimportantes(); break; } case 5: {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl; else automata.analizarcadena(); break; } case 6: {if(errorapertura != 0) cout << "ERROR: NO SE ABRIO ANTERIORMENTE EL ARCHIVO CORRECTAMENTE." << endl; else {if(automata.comprobacionestadodfa()) cout << "Este fichero es un DFA." << endl; else cout <<"Este fichero NO es un DFA." << endl; } break; } case 0: {return 0; break; } } }while(opcion != 0); } Mil gracias a quien pueda ayudarme!
Título: Re: Undefined reference to (C++)
Publicado por: Gallu en 30 Octubre 2017, 12:29 pm
Hola, seguro que no se están linkando bien las fuentes, qué ide estás usando ?? , has probado en incluir el cpp en lugar del hpp ??
Saludos
Título: Re: Undefined reference to (C++)
Publicado por: Eskizoide en 30 Octubre 2017, 12:31 pm
Estoy usando devc++, y no me manejo muy bien osea que igual algo del linker está fallando que no entiendo. Y no he probado eso que dices, no se me había ocurrido, probaré a ver, gracias.
Título: Re: Undefined reference to (C++)
Publicado por: Eskizoide en 30 Octubre 2017, 12:58 pm
Hola, seguro que no se están linkando bien las fuentes, qué ide estás usando ?? , has probado en incluir el cpp en lugar del hpp ??
Saludos
Hola, nada, eso no funciona, como imaginaba, ya que no accede a los .hpp y pierde variables y tal. He probado a compilarlo por línea de comandos y me sale el mismo error, undefined reference to, así que no creo que sea problema del IDE.
Título: Re: Undefined reference to (C++)
Publicado por: Gallu en 30 Octubre 2017, 13:14 pm
Las fuentes (cpp) de los que dependes están compiladas ???
Título: Re: Undefined reference to (C++)
Publicado por: Eskizoide en 30 Octubre 2017, 13:47 pm
Nada, ya está arreglado, ese era el problema se me olvidó compilar uno de los ficheros, pensaba que cuando compilaba menu.cpp se compilaban el resto. Gracias :)
|