ayuda con problema c++ relocation truncated

Iniciado por + 1 Oculto(s), 9 Mayo 2016, 01:08 AM

0 Miembros y 1 Visitante están viendo este tema.

+ 1 Oculto(s)

Citarcd 'C:\Users\SM\Documents\NetBeansProjects\Automata'
C:\cygwin64\bin\make.exe -f Makefile CONF=Debug
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/c/Users/SM/Documents/NetBeansProjects/Automata'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin-Windows/automata.exe
make[2]: Entering directory '/cygdrive/c/Users/SM/Documents/NetBeansProjects/Automata'
mkdir -p dist/Debug/Cygwin-Windows
g++     -o dist/Debug/Cygwin-Windows/automata build/Debug/Cygwin-Windows/Cadena.o build/Debug/Cygwin-Windows/main.o
build/Debug/Cygwin-Windows/main.o: In function `main':
/cygdrive/c/Users/SM/Documents/NetBeansProjects/Automata/main.cpp:28: undefined reference to `Cadena::fragmentar(std::string)'
/cygdrive/c/Users/SM/Documents/NetBeansProjects/Automata/main.cpp:28:(.text+0x72): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Cadena::fragmentar(std::string)'
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:63: recipe for target 'dist/Debug/Cygwin-Windows/automata.exe' failed
make[2]: *** [dist/Debug/Cygwin-Windows/automata.exe] Error 1
make[2]: Leaving directory '/cygdrive/c/Users/SM/Documents/NetBeansProjects/Automata'
nbproject/Makefile-Debug.mk:60: recipe for target '.build-conf' failed
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory '/cygdrive/c/Users/SM/Documents/NetBeansProjects/Automata'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make: *** [.build-impl] Error 2

ese es el error que me sale


y solo estoy llamando a una funcion desde el main el cual esta en un diferente archivo




archivo Cadena.h
Código (cpp) [Seleccionar]

#ifndef CADENA_H
#define CADENA_H

#include <string>
using namespace std;

class Cadena {
public:
    Cadena();
    string fragmentar(string );
    Cadena(const Cadena& orig);
    virtual ~Cadena();
private:
   

};

#endif /* CADENA_H */



archivo Cadena.cpp
Código (cpp) [Seleccionar]
#include "Cadena.h";
#include <vector>;
# include <iostream>
using namespace std;

Cadena::Cadena() {
}

Cadena::Cadena(const Cadena& orig) {
}

Cadena::~Cadena() {
}

string fragmentar(string texto ){
    int posicion=0;
    string delimitador=" ";
    vector<string> resultado;
    while( ( posicion = texto.find( delimitador ) ) != string::npos ) {
resultado.push_back( texto.substr( 0, posicion ));
texto.erase( 0, posicion + delimitador.length());
}
   
    for(int i=0; i<resultado.size(); i++){
    }
    return "hola";
}


archivo main

Código (cpp) [Seleccionar]

#include <cstdlib>

#include <iostream>
#include <iomanip>

#include "Cadena.h"
using namespace std;

/*
*
*/
int main(int argc, char** argv) {
    std::cout<<"si funciona";
    Cadena cadena;
    string var="comeGalleta";
    string rs=cadena.fragmentar(var);
    return 0;
}




solo es una prueba, es decir la logica del programa esta mal, repito es solo una prueba y al ejecutarlo sale error, pero si es muy sencillo no entiendo como sale error

me podrian ayudar...

AlbertoBSD

Que tsl nunca he programado con netbeans pero veo que usa cygwin...

No te esta reconociendo

Cadena::fragmentar(std::string)

Por eso corta la compilacion. Ahorita que llegue a mi casa lo pruebo.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

gracias por probar mi codigo
gracias por la ayuda... estare al tanto de tu respuesta

Eternal Idol

qwery.azc: no hagas doble post por favor.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

AlbertoBSD

C:\ejemplos>g++ main.cpp Cadena.cpp
Cadena.cpp:1:20: warning: extra tokens at end of #include directive
#include "Cadena.h";
                    ^
Cadena.cpp:2:18: warning: extra tokens at end of #include directive
#include <vector>;


Me marca que tiene dos punto y comas de mas  :rolleyes: :rolleyes: y posteriormente me marca el mismo error que a ti.

C:\ejemplos>g++ main.cpp Cadena.cpp
C:\Users\alberto\AppData\Local\Temp\cc1x9SGg.o:main.cpp:(.text+0x8e): undefined
reference to `Cadena::fragmentar(std::string)'
collect2.exe: error: ld returned 1 exit status


La funcion fragmentar esta definida mas no es parte de la clase

actualmente esta asi:

Código (cpp) [Seleccionar]
string fragmentar(string texto ){
    int posicion=0;
    string delimitador=" ";
    vector<string> resultado;
...


Cuando deberia de estar asi:

Código (cpp) [Seleccionar]
string Cadena::fragmentar(string texto ){
    int posicion=0;
    string delimitador=" ";
    vector<string> resultado;
...


Posterior a eso no ya no marca error en la compilacion.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

entonces tengo que declarar asi las funciones en el punto .cpp?

AlbertoBSD

 si te fijas solo se le agrego
Cadena::

Si no, no serian parte de la clase. y tendrias que llamartla sin el punto
asi esta
cadena.fragmentar(var);

tendrias que llamarla

fragmentar(var);

Saludos.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

muchas gracias... amigo

yo soy nob en c++, vengo de mi lenguaje nativo "JAVA" y es bastante diferente