Undefined reference to (function)

Résolu/Fermé
Darkellysio Messages postés 33 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 30 octobre 2017 - Modifié par Darkellysio le 3/02/2015 à 06:57
Darkellysio Messages postés 33 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 30 octobre 2017 - 4 févr. 2015 à 19:56
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 févr. 2015 à 07:57
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 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 30 octobre 2017
3 févr. 2015 à 15:54
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 févr. 2015 à 17:25
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 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 30 octobre 2017
4 févr. 2015 à 19:56
Très juste. Merci beaucoup
0