Erreur LNK2005 [Résolu]

Galn_ 2 Messages postés jeudi 24 novembre 2016Date d'inscription 24 novembre 2016 Dernière intervention - 24 nov. 2016 à 16:36 - Dernière réponse : Galn_ 2 Messages postés jeudi 24 novembre 2016Date d'inscription 24 novembre 2016 Dernière intervention
- 24 nov. 2016 à 17:27
Bonjour,
J'ai un problème sur une compilation en C avec Visual Studio qui me retourne une l'erreur LNK2005. Voici mon code :
pile.h
#ifndef _PILE_
#define _PILE_

// librairies
#include <stdbool.h>

// constantes
#define max 99

// types
typedef int element;
typedef element data[max];
typedef struct
{
 data contenu;
 int sommet;
} pile;

// prototypes
pile init_pile();
bool pile_vide (pile);
bool pile_pleine (pile);
pile empiler(pile, element);
pile depiler(pile);
element sommet_pile(pile);
int taille_pile(pile);
bool piles_egales(pile,pile);
#endif


pile.c
//Librairies
#include <stdio.h>
#include "pile.h"

pile init_pile()
{
 pile p;
 p.sommet = max;
 int i;
 for (i = 0; i <= p.sommet; i++)
 {
  p.contenu[i] = 0; 
 }
 return p;
}

bool pile_vide(pile p)
{
 int i = 0;
 p.sommet = taille_pile(p);
 bool verif = true;
 while (verif && (i <= p.sommet))
 {
  if (p.contenu[i] != 0)
  {
   verif = false;
  }
  i++;
 }
 return verif;
}

bool pile_pleine(pile p)
{
 int i = 0;
 p.sommet = taille_pile(p);
 bool verif = true;
 while (verif && (i <= p.sommet))
 {
  if (p.contenu[i] != 0)
  {
   verif = true;
  }
  i++;
 }
 return verif;
}

pile empiler(pile p, element e)
{
 int i = 0;
 p.sommet = taille_pile(p);
 if (i == p.sommet)
 {
  return p;
 }
 else
 {
  p.contenu[i] = e;
  return p;
 }
}

pile depiler(pile p)
{
 p.sommet = taille_pile(p);
 int i = p.sommet;
 while (i >= 0)
 {
  printf("%d\n", p.contenu[i]);
 }
 return p;
}

element sommet_pile(pile p)
{
 p.sommet = taille_pile(p);
 return p.contenu[p.sommet];
}

int taille_pile(pile p)
{
 int i = 0;
 while (p.contenu[i] != 0)
 {
  i++;
 }
 return i;
}

bool piles_egales(pile t, pile p)
{
 int i = 0;
 bool verif = true;
 p.sommet = taille_pile(p);
 while (verif && (i <= p.sommet))
 {
  if (t.contenu[i] != p.contenu[i])
  {
   verif = false;
  }
  i++;
 }
 return verif;
}


main.c
#include <stdio.h>
#include <stdlib.h>
#include "pile.c" 

int main()
{
    printf("Axiome 1 : Est_Vide(Init) = vrai => ");
    if (pile_vide(init_pile())==true) {
        printf("vérifié\n");
    } else {
        printf("non vérifié\n");
    }

    printf("Axiome 2 : Est_Pleine(Init)= faux => ");
    if (pile_pleine(init_pile())==false) {
        printf("vérifié\n");
    } else {
        printf("non vérifié\n");
    }

    printf("Axiome 3 : Est_Vide(Empile(P,E))=faux => ");
    pile mapile;
    mapile=init_pile();
    element e=3;
    mapile=empiler(mapile,e);
    if (pile_vide(mapile)==false) {
        printf("vérifié\n");
    } else {
        printf("non vérifié\n");
    }

    printf("Axiome 4 : Empiler(P,Depiler(P,E)) = (P,E) => ");
    mapile=init_pile();
    mapile=empiler(mapile,3);
    mapile=empiler(mapile,7);
    pile p1=mapile;
    e=sommet_pile(mapile);
    mapile=depiler(mapile);
    mapile=empiler(mapile,e);
    if (piles_egales(mapile,p1)) {
        printf("vérifié\n");
    }
    else {
        printf("non vérifié\n");
    }

    printf("Taille de la pile finale : %d",taille_pile(mapile));

    return 0;
}


J'obtiens ces erreurs suivantes :
_depiler déjà défini(e) dans pile.obj
_empiler déjà défini(e) dans pile.obj
_init_pile déjà défini(e) dans pile.obj
Et ce pour toutes les fonctions du fichier .h
J'ai pas mal traîné sur les forums pour trouver une solution, mais rien en ce qui concerne du C. Le projet a été construit sans en-tête pré-compilé.
Merci pour votre aide !
Afficher la suite 

2 réponses

Répondre au sujet
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 18 avril 2018 Dernière intervention - Modifié par cptpingu le 24/11/2016 à 17:07
0
Utile
Bonjour.

Le #include "pile.c" au lieu de "pile.h" dans ton "main.c" me paraît extrêmement suspicieux :)

Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Galn_ 2 Messages postés jeudi 24 novembre 2016Date d'inscription 24 novembre 2016 Dernière intervention - 24 nov. 2016 à 17:27
0
Utile
... C'était bien sûr l'erreur bête la solution
Merci bien pour la réponse, je me relierai 3 fois désormais x)
Au plaisir !
Commenter la réponse de Galn_

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.