web-dev-qa-db-fra.com

Qu'est-ce qui cause l'erreur "référence non définie à (une fonction)"?

Je reçois l'erreur:

main.o(.text+0x1ed): In function `main':
: undefined reference to `avergecolumns'
collect2: ld returned 1 exit status

quand je gcc * .o. Je ne sais pas exactement ce qui cause cette erreur. D'autres affiches l'ont expliqué car la fonction n'est pas trouvée ou la fonction est vide. Si quelqu'un pouvait clarifier ou affiner, ce serait très apprécié!

Voici le code de ma fonction (j'essaie de calculer la moyenne de la colonne dans les tableaux 2D):

#include "my.h"

void averagecolumns (int x, int y, int** a)
{
    int i;
    int j;
    float sum;
    float colAvg;

    sum = 0;
    colAvg = 0;

    printf("i.  The column averages are: \n");
    for(i = 0; i < x; i++)
        {
            for(j = 0; j < y; j++)
                {
                    sum += a[i][j];
                    colAvg = sum / (float)x;
                }
            printf("Column: %3d, Average: %6.2f", j, colAvg);
            sum = 0;   
            colAvg = 0;
        }

Les parties relavent du principal sont:

#include "my.h"

int main (int argc, char* argv[])
{
     int** a;
     float** colAvg;
     int ROWS;
     int COLS;
     int i;
     int j;
     int** table;
     FILE* fpmyfile;
     int closeResult;

....

             printme (ROWS, COLS, a);                              // call functions a - j
             oddvalues (ROWS, COLS, a);
             oddlocations (ROWS, COLS, a);
             countoddrows (ROWS, COLS, a);
             addrows (ROWS, COLS, a);
             findfirstsmall (ROWS, COLS, a);
             findlastlarge (ROWS,COLS, a);                          
             addcolumns (ROWS, COLS, a);
             avergecolumns (ROWS, COLS, a);

....

}

De plus, est-ce un éditeur de liens ou une erreur de compilation (je ne savais pas quelle balise ajouter).

14
Piseagan

C'est une erreur de l'éditeur de liens. ld est l'éditeur de liens, donc si vous obtenez un message d'erreur se terminant par "ld a renvoyé 1 état de sortie", cela vous indique qu'il s'agit d'une erreur de l'éditeur de liens.

Le message d'erreur vous indique qu'aucun des fichiers objets que vous liez ne contient de définition pour avergecolumns. La raison en est que la fonction que vous avez définie s'appelle averagecolumns (en d'autres termes: vous avez mal orthographié le nom de la fonction lors de l'appel de la fonction (et probablement dans le fichier d'en-tête également - sinon vous auriez obtenu une erreur différente au moment de la compilation)).

24
sepp2k