Bonsoir,

voici un programme tout simple en 3 fichiers, contenant une classe, pour les débutants qui peuvent avoir un souci avec l'édition de liens au moment de la compilation :
Code Personne.h : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class Personne {
 private:
  int annee;
 public:
  Personne(int a);
  void afficher();
};

Code Personne.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
#include "Personne.h"
#include <iostream>
 
using namespace std;
 
Personne::Personne(int a) {
  annee = a;
}
void Personne::afficher() {
  cout << "Annee : " << annee << endl;
}

Code TestPersonne.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#include "Personne.h"
 
int main(){
  Personne p(15);
  p.afficher();
  return 0;
}

Deux manières de compiler (sans et avec Makefile) :
sans Makefile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$ g++ -c TestPersonne.cpp Personne.cpp
$ g++ -o TestPersonne TestPersonne.o Personne.o
$ ./TestPersonne
 
Annee : 15
avec Makefile :
Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
all: TestPersonne
 
TestPersonne:	        Personne.o TestPersonne.o
			g++ -o TestPersonne Personne.o TestPersonne.o
 
Personne.o: 		Personne.cpp Personne.h
			g++ -c Personne.cpp
 
TestPersonne.o: 	TestPersonne.cpp Personne.h
			g++ -c TestPersonne.cpp
ensuite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$ make
$ ./TestPersonne
 
Annee : 15
Si vous obtenez des erreurs du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
TestPersonne.o: In function `main':
TestPersonne.cpp:(.text+0x19): undefined reference to `Personne::Personne(int)'
TestPersonne.cpp:(.text+0x25): undefined reference to `Personne::afficher()'
collect2: ld returned 1 exit status
ou bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cc   Personne.o   -o Personne
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
Personne.o: In function `Personne::afficher()':
Personne.cpp:(.text+0x33): undefined reference to `std::cout'
Personne.cpp:(.text+0x38): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
Personne.cpp:(.text+0x44): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
Personne.cpp:(.text+0x4c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
Personne.cpp:(.text+0x54): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
Personne.o: In function `__static_initialization_and_destruction_0(int, int)':
Personne.cpp:(.text+0x7b): undefined reference to `std::ios_base::Init::Init()'
Personne.cpp:(.text+0x80): undefined reference to `std::ios_base::Init::~Init()'
Personne.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
make: *** [Personne] Erreur 1
c'est que l'édition de liens n'a pas été correcte, c'est ce qui m'est arrivé et je voulais en faire profiter ceux qui ont ramé dessus