Bien le bonjour !

Avant tout, je m'excuse si la solution est évidente et que j'ai simplement tout fiat de travers. Mon problème peut sembler au problème typique d'un FAQ, il ne s'agit d'ailleurs pas du fait que je ne trouve pas de solution mais simplement que je ne vois pas ce que je fais de différent par rapport à la solution.

Voilà donc, je dois réaliser un petit code, les fonctions devant être séparées dans différents fichiers. Lors que j'écris tout dans un même fichier principal Cpp, tout se passe bien. Mais lorsque je retire les fonctions de ce fichier principal pour les mettre dans un fichier cpp annexe, et que je créé le header associé, le fichier header est bien lu mais la fonction n'est pas trouvée. Je mets les codes en guise de démo :

Le code principal, contenant le main et une fonction printBigrammes
bigrammes.cpp :
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
#include <vector>
 
#include "frequence.h"
 
using namespace std;
 
void printBigrammes(int countBigrammes,vector< vector<int> > &tab);
 
int main(int argc, char *argv[]) {
	// On initialise notre tableau
	//int tabBigrammes [27][27];
	int countBigrammes;
	vector<vector<int> > tabBigrammes(27, vector<int>(27));
 
	// On check le nombre d'arguments
	if ( argc != 2 ) {
		cout << "usage: " << argv[0] << " nom_fichier" << endl;
		return 1;
	}
 
	// On ecrit le nom de fichier
	string nom(argv[1]);
 
	// On utilise la fonction freqBigrammes
	countBigrammes = freqBigrammes(nom,tabBigrammes);
 
	// On utilise tabBigramme pour verifier la lecture
	if ( countBigrammes == -1){
		cout << "Probleme de lecture du fichier: " << argv[1] << endl;
		return 1;
	}
 
	// Print in text
    printBigrammes(countBigrammes,tabBigrammes);
 
  return 0;
}
 
void printBigrammes(int countBigrammes,vector<vector<int> > &tab) {
 
    // Nombre de bigrammes
    cout << countBigrammes << endl;
 
    // Firstline
    cout << ' ' << ' ';
   for (int i=0; i<27; i++) {
        char headerChar;
        if (i == 26) { headerChar = ' '; }
        else { headerChar = 'a'+i ;}
        cout << headerChar << ' ';
	}
    cout << endl;
 
    // Print values
    for (int i=0; i<27; i++) {
        char lineChar;
 
        if (i == 26) { lineChar = ' '; }
        else { lineChar = 'a'+i ;}
 
        cout << lineChar << ' ';
        for (int j=0; j<27; j++) {cout << tab[i][j] << ' ';}
        cout << endl;
	}
 
   return;
}
frequence.cpp :
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "frequence.h"
 
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
#include <vector>
 
using namespace std;
 
int freqBigrammes(string nom, vector< vector<int> > &tab);
void cumuleBigrammes(vector<vector<int> > &tab, char c1, char c2);
 
int freqBigrammes(string nom , vector<vector<int> > &tab) {
 
    int countBigrammes = 0;
	ifstream input;
	input.open(nom.c_str());
 
	// Fail : premiere case = -1
	if ( input.fail() ) {
		countBigrammes = -1;
		return countBigrammes;
	}
 
	// Pas de fail
	else {
		char c1;
		char c2;
 
		// Premier chargement du premier caractere
		// Ne sera pas effectue dans la boucle
		c2 = input.get();
		c2 = tolower(c2);
 
		 do {
			// On passe c2 dans c1 et on recupere un nouveau c2
			c1 = c2;
			c2 = input.get();
			c2 = tolower(c2);
 
            cumuleBigrammes(tab,c1,c2);
            countBigrammes += 1;
 
		 } while (c2 != EOF); // While jusqu'a fin de fichier
	}
   return countBigrammes;
}
 
void cumuleBigrammes(vector<vector<int> > &tab, char c1, char c2) {
// Si les deux sont des lettres
    if (( c1 >= 'a' && c1 <= 'z' ) && ( c2 >= 'a' && c2 <= 'z' )) {
        tab[c1-'a'][c2-'a']++;
    }
    // Si c1 est un espace
    if (( c1 == ' ' || c1 == '\n' ) && ( c2 >= 'a' && c2 <= 'z' )){
        tab[26][c2-'a']++;
    }
    // Si c2 est un espace
    if (( c2 == ' ' || c2 == '\n'  ) && ( c1 >= 'a' && c1 <= 'z' )){
        tab[c1-'a'][26]++;
    }
    // Si c1 et c2 sont des espaces
    if (( c1 == ' ' || c1 == '\n' ) && ( c2 == ' ' || c2 == '\n'  )){
        tab[26][26]++;
    }
 
    return;
}
frequence.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
#include <vector>
 
using namespace std;
 
int freqBigrammes(string nom, vector< vector<int> > &tab);
void cumuleBigrammes(vector<vector<int> > &tab, char c1, char c2);
L'erreur retournée au lancement du build :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
undefined reference to `freqBigrammes(std::string, std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)'|
J'utilise Code::Blocks 13.12 sous Windows 10.

Si quelqu'un saurait me dire la faute grossière que je dois être incapable de voir, il ou elle est le/la bienvenu/e !

Merci à vous.