2010-09-27 21 views
5

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

//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 está trabajando, y cómo puedo solucionarlo?

+0

Utilice el código fuente característica de formato, haga clic en el ícono "101 010" en el editor. – mikerobi

+1

Olvidó el 'void' delante de' A :: setA' en su archivo a.cpp. –

Respuesta

2

Actualmente se está compilando y la vinculación única ex2.cpp pero este archivo ha hace uso de DEF y la funcionalidad se llama presente en a.cpp por lo que necesita para compilar y enlazar a.cpp así como:

g++ ex2.cpp a.cpp 

El comando anterior compile el archivo fuente (.cpp) en archivos de objetos y vinculelos para darle el ejecutable a.out.

23

No vincula los archivos de encabezado. Puede vincular archivos de objeto, creados mediante la compilación de archivos .cpp. Debe compilar todos los archivos fuente y pasar los archivos de objeto resultantes al vinculador.

A partir del mensaje de error parece que está utilizando GCC. Si es así, creo que puede hacer
g++ ex2.cpp a.cpp
para que compile ambos archivos .cpp e invocar el vinculador con los archivos de objeto resultantes.

+8

+1 para 'No vincula archivos de encabezado'. :) –

8

necesita compilar y enlazar ambos archivos de origen, por ejemplo:

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

necesita compilar y luego enlazar tanto de código (.cpp) archivos:

g++ -Wall -pedantic -g -o your_exe a.cpp ex2.cpp 
+1

¿Puedo sugerir '-Werror' también :)? –

Cuestiones relacionadas