Undefined reference to (function)

Résolu
Darkellysio Messages postés 33 Statut Membre -  
Darkellysio Messages postés 33 Statut Membre -
Bonjour à tous.

Dans le cadre d'un travail, je dois corriger un programme en C++. J'utilise Code Bloks

Celui ci est constitué :
- d'un main.cpp
- d'un sous programme.cpp
- d'un sous programme.h

J'ai bien mis #include "fonctionsUtilitaires.h" dans les deux .cpp
De même, j'ai mis dans les trois
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

Une fonction est appelée depuis le main.cpp de la manière suivante
histogramme(image,frequences[v]);

Image est un tableau à deux dimensions

Voici le prototype de la fonction dans le .h
void histogramme(int p_image[LARGEUR][HAUTEUR], int p_frequences);

Et voici la fonction dans le .cpp
void histogramme(int p_image[LARGEUR][HAUTEUR], int p_frequences[])
{
//calcule les frequences
for (int ligne = 0; ligne < HAUTEUR; ligne++)
{
for (int colonne = 0; colonne < LARGEUR; ++colonne)
{
p_frequences[p_image[ligne][colonne]]++;
}
}
}

Et voici l'erreur que j'obtiens
C:\...\main.cpp|52|undefined reference to `histogramme(int (*) [13], int)'|

Pourriez vous m'aider s'il vous plait ?

2 réponses

fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bonjour,
Le prototype de la fonction histogramme n'est pas cohérent...
Dans le.h, tu dis que le deuxième argument est un int et dans le cpp, tu mets un pointeur. Attention aussi à voir pour l'appel.
Note : studio.h et stdlib.h c'est du C...
0
Darkellysio Messages postés 33 Statut Membre
 
Bonjour

frequence[v] n'est pas un pointeur mais le vième élément du tableau fréquences non ?
C'est quoi les équivalents sous C++ stp ? J'ai étudié le C au premier semestre et ait un peu trop pris l'habitude de mettre stdlib et stdio.
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
frequence[v] n'est pas un pointeur
Cela dépend de la déclaration du type de la variable frequence. Ici vu le contexte, oui je pense qu'il s'agit du v+1ème élément du tableau.

Mais ma remarque ne portait pas sur ça.
Voici le prototype de la fonction dans le .h
void histogramme(int p_image[LARGEUR][HAUTEUR], int p_frequences);

Et voici la fonction dans le .cpp
void histogramme(int p_image[LARGEUR][HAUTEUR], int p_frequences[])

Il y a une incohérence entre les deux prototypes. Il faut choisir entre : int p_frequences et int p_frequences[].
Si tu souhaites envoyé un entier : int frequence. Si tu souhaites envoyer un pointeur (on ne peut pas passer de tableau en C) : int p_frequences[].

L'équivalent sous C++ de stdio.h est iostream, et celui de stdlib.h est cstdlib

Cdlt,
0
Darkellysio Messages postés 33 Statut Membre
 
Très juste. Merci beaucoup
0