es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Referencia no definida al método de estructura en otro archivo .cpp

Como dice el título. Tengo este mismo problema con mi proyecto más grande, pero decidí verificar este pequeño modelo de prueba por el mismo problema. Resulta que el problema sigue presente y he intentado todo lo que pude encontrar pero sigue igual. He intentado el artículo.

El IDE que utilicé es Code::Blocks que se encarga de toda la compilación y enlace (me aseguré de que los archivos se agregarán al proyecto y estuvieran configurados tanto para la compilación como para el enlace) y el compilador es gcc.

Este es el error exacto que obtengo:

main.cpp|9| referencia indefinida a `Calc::add2 (int, int)’

Y estos son todos los archivos:

main.cpp:

#include
#include “add.h”

using namespace std;

int main()
{
Calc a;
cout<<“2 + 2 = “<<a.add(2,2);
return 0;
}

add.h:

#ifndef ADD_H_INCLUDED
#define ADD_H_INCLUDED

struct Calc
{
int add(int a, int b);
};

#endif // ADD_H_INCLUDED

add.cpp:

struct Calc
{
int add(int a, int b)
{
return a + b;
}
};

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema en este caso es un error de enlace. El archivo main.cpp incluye el archivo de encabezado “add.h”, que declara una estructura “Calc” con una función miembro “add”. Sin embargo, en el archivo add.cpp, se declara nuevamente la estructura “Calc” (lo cual no es necesario ya que ya está declarado en add.h) y la función miembro “add” se define dentro de la declaración de la estructura. Esto resulta en una definición duplicada de la estructura y la función, lo que conduce al error de enlace.

    Para solucionar el problema, elimina la declaración de la estructura en add.cpp y define la función miembro “add” fuera de la declaración de la estructura de la siguiente manera:

    add.cpp:

    #include “add.h”

    int Calc::add(int a, int b)
    {
    return a + b;
    }

    Con esta modificación, el error de enlace debería resolverse.

Comments are closed.