cómo vincular los archivos de cabecera en c++

Soy nuevo en la programación en C++ con los archivos de cabecera. Este es mi código actual:

//a.h
#ifndef a_H
#define a_H
namespace hello
{
  class A
  {
    int a;
    public:
      void setA(int x);
      int getA();
  };
} 
#endif

//a.cpp
#include "a.h"
namespace hello
{
   A::setA(int x)
  {
    a=x;
  }
  int A::getA()
  {
    return a;
  }
}

//ex2.cpp
#include "a.h"
#include<iostream>
using namespace std;

namespace hello
{
  A* a1;
}
using namespace hello;
int main()
{
  a1=new A();
  a1->setA(10);
  cout<<a1->getA();
  return 1;  
}

Cuando intento compilar con g++ ex2.cpp, me sale este error:

In function `main':
ex2.cpp:(.text+0x33): undefined reference to `hello::A::setA(int)'
ex2.cpp:(.text+0x40): undefined reference to `hello::A::getA()'
collect2: ld returned 1 exit status

¿Por qué no es trabajo, y cómo puedo solucionarlo?

Por favor, utilice el código fuente de la función de formateo, haga clic en el “101 010” icono en el editor.
Usted se olvidó de los void en frente de A::setA en su a.cpp archivo.

OriginalEl autor siri | 2010-09-27

4 respuestas

  1. 26

    No vincular archivos de encabezado. Enlace objeto de archivos, que se crean mediante la compilación de .cpp archivos. Usted necesita para compilar todos los archivos de origen y pasar el objeto resultante archivos para el enlazador.

    Desde el mensaje de error parece que está usando GCC. Si es así, creo que se puede hacer

    g++ ex2.cpp a.cpp

    para que se compile tanto .cpp archivos e invocar el vinculador con el objeto resultante de archivos.

    +1 para You don't link header files. 🙂

    OriginalEl autor sbi

  2. 8

    Usted necesita para compilar y vincular tanto archivos de origen, por ejemplo:

    g++ ex2.cpp a.cpp -o my_program

    OriginalEl autor Oliver Charlesworth

  3. 3

    Usted necesita para compilar y enlazar la fuente (.cpp) archivos:

    g++ -Wall -pedantic -g -o your_exe a.cpp ex2.cpp
    Sugiero -Werror así 🙂 ?

    OriginalEl autor Nikolai Fetissov

  4. 2

    Actualmente está compilar y vincular sólo ex2.cpp pero este archivo se hace uso de la clase def y llamadas de función presente en a.cpp por lo que necesita para compilar y vincular a.cpp así como:

    g++ ex2.cpp a.cpp

    El comando de arriba va a compilar el archivo fuente(.cpp) en archivos objeto y el enlace para darle la a.out ejecutable.

    OriginalEl autor codaddict

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *