Error LNK2019

Résolu
issam000000 Messages postés 2 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 20 janvier 2009 - 20 janv. 2009 à 09:54
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 - 20 janv. 2009 à 17:39
bonjour ,
je suis débutant en programmation , je  arrive pas a résoudre cette erreur , quand je compile tout ce passe bien , 0 erreur 0 avertissement , mais quand je debug .ca me sort deux erreurs  :
1>main().obj : error LNK2019: symbole externe non résolu "int __cdecl Acquisition_Ajoute(struct Personne *,unsigned int)" (?Acquisition_Ajoute@@YAHPAUPersonne@@I@Z) référencé dans la fonction _main
1>C:\Documents and Settings\issam\Bureau\tp C\tp\tp7\Debug\tp7.exe : fatal error LNK1120: 1 externes non résolus

j'utilise visual basic 2005 .  voila mon code :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Personne  Personne;
struct Personne
{
    char*nom ;unsigned  int num;
};
size_t n;
char *nom= NULL;
int tel;

int Acquisition_Ajoute (Personne*Annuaire,size_t);

void Tri (Personne *Annuaire);

void main (void)
{

    Personne *Annuaire;
    Annuaire =(Personne*) malloc(n*sizeof(Personne));

    if (Acquisition_Ajoute(Annuaire,n))
    {
        printf("%s %d",Annuaire->nom,Annuaire->num);
    }

}

int Acquisition_Ajoute (Personne*Annuaire,size_t *n)
{

    char tmp[100];
    do
    {

        printf ("Saisie du nom moin de 100 caracteres\n");
        _flushall();
        fgets(tmp,sizeof(tmp),stdin);
        Annuaire->nom = (char*)malloc(((strlen(tmp))+1)* sizeof(char));
        strcpy_s((Annuaire->nom),strlen(tmp)+1,tmp);
        printf ("Saisie du num\n");
        _flushall();
        scanf_s("%d",&(Annuaire->num));
        if (!( strlen (Annuaire->nom)<101 && Annuaire->num>0 ) )
        {
            return 0;
            free(Annuaire);
            printf ("Nom ou Numero incorrect \n(Nom ne depassant pas 100 caracteres et numero de telephone et un nombre positif \n");
        }
        else
            *n++;
        return 1;
    }while (!( strlen (Annuaire->nom)<101 && Annuaire->nom >0 ) );

}

void Tri (Personne *Annuaire)
{
    unsigned int i=0;
    char tmp[100];

    for (i=0 ; i<n ; i++)
    {
        if (strcmp (Annuaire[i].nom, Annuaire[i+1].nom) < 0)   
        {
            strcpy_s (tmp,strlen(Annuaire[i].nom)+1,Annuaire[i].nom);                               
            strcpy_s (Annuaire[i].nom,strlen(Annuaire[i+1].nom)+1,Annuaire[i+1].nom);
            strcpy_s (Annuaire[i+1].nom,strlen(tmp)+1,tmp);

        }
    }
}

j'ai déja cherché dans les discution ici , j'ai trouvé un tuto qui montre comment configurer visual basic 2005 pour les application console, j'ai suivi tout ce qu'il ya  dedans , mais ca na pas marché . aucun changement. j'ai les meme erreurs merci pour votre aide .

3 réponses

BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
20 janv. 2009 à 11:43
Hello,
D'un côté, tu déclare un paramètre en size_t et de l'autre size_t*
Petite étourderie je pense.
Et puis je pense qu'à la place de Visual Basic, tu voulais dire Visual Studio...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
issam000000 Messages postés 2 Date d'inscription dimanche 18 janvier 2009 Statut Membre Dernière intervention 20 janvier 2009
20 janv. 2009 à 17:35
salut bruno tu veux dire quoi par de l'autre ??   sur la fontion tri  j'ai voulu cree un poiteur sur n . qui me permet de changer la valeur de n . cette valeur sera effectivement changé apres la fin de la fonction , ou je me trompe peut etre?
oui Je voulais dire Visual studio 2005 en effet.

si je me trompe comment je peut faire pour changer la valeur de n dans une fonction. sachant que c pas la valeur que je veux renvoyé.

Merci.
3
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
20 janv. 2009 à 17:39
Il faut que les 2 prototypes aient la même forme.
Au dessus du main, tu as mis: int Acquisition_Ajoute (Personne*Annuaire,size_t);
En dessous, tu as mis: int Acquisition_Ajoute (Personne*Annuaire,size_t *n)
Dans ton cas, il faut une étoile dans les 2.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous