2010-09-27 3 views
5

Je suis nouveau à la programmation en C++ avec des fichiers d'en-tête. Ceci est mon code actuel:comment lier des fichiers d'en-tête 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; 
} 

Lorsque je tente de le compiler avec g++ ex2.cpp, je reçois cette erreur:

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 

Pourquoi ça ne marche pas, et comment puis-je résoudre ce problème?

+0

S'il vous plaît utiliser le code source formatage, cliquez sur l'icône "101 010" dans l'éditeur. – mikerobi

+1

Vous avez oublié le 'void' devant' A :: setA' dans votre fichier a.cpp. –

Répondre

2

Actuellement, vous compilez et lier seulement ex2.cpp mais ce fichier a fait usage de définition de classe et des appels de fonctions présentes dans a.cpp de sorte que vous devez compiler et lier a.cpp ainsi que:

g++ ex2.cpp a.cpp 

La commande ci-dessus compilez le fichier source (.cpp) en fichiers objet et associez-les pour obtenir l'exécutable a.out.

23

Vous ne liez pas les fichiers d'en-tête. Vous liez fichiers objet, qui sont créés en compilant .cpp fichiers. Vous devez compiler tous vos fichiers sources et transmettre les fichiers objets résultants à l'éditeur de liens. A partir du message d'erreur, il semble que vous utilisez GCC. Si oui, je pense que vous pouvez faire
g++ ex2.cpp a.cpp
pour qu'il compile les deux fichiers .cpp et invoque l'éditeur de liens avec les fichiers objets résultants.

+8

+1 pour 'Vous ne liez pas les fichiers d'en-tête'. :) –

8

Vous devez compiler et lier les fichiers source, par exemple:

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

Vous devez compiler et lier à la fois source (.cpp) fichiers:

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

Puis-je suggérer «-Werror» aussi :)? –

Questions connexes