[visual C++ 6] probléme de linkage,!!!!!!!!aidezzzz moiiiiiiiiiiii!!!!

probléme de linkage,!!!!!!!!aidezzzz moiiiiiiiiiiii!!!! [visual C++ 6] - C++ - Programmation

Marsh Posté le 09-01-2005 à 21:19:30    

bjr tout le monde voila je suis entrain de réaliser un projet sur visual et quan je compile j'ai se message d'erreur.........
Tree.obj : error LNK2005: _ops already defined in main.obj
Debug/ProjetC.exe : fatal error LNK1169: one or more multiply defined symbols found.
j'ai toute essayé mais j'arrive a reglé le probléme quelqun pourrai m'aidé svppppppppp :??:  
 
je vous rappel que j'ai essayé le compilateur C et C++ j'ai meme fait la procedure habituel  
#ifndef   ..........
#define   .........
 
déclarations
 
#endif

Reply

Marsh Posté le 09-01-2005 à 21:19:30   

Reply

Marsh Posté le 09-01-2005 à 22:03:27    

sans code ni rien, ca va etre juste non ?  :o


---------------
.
Reply

Marsh Posté le 09-01-2005 à 22:05:04    

#ifndef __TREE_H__
#define __TREE_H__
 
 
char ops[6]={'*','/','+','-','=','\n'};
 
char* inputExpression;
 
int experLength;
 
typedef enum {rien,Mult,Div,Add,Sub,Equal} operande;
 
 
typedef struct Noeud{
 
  operande op;
 
  char c;
 
  struct Noeud* filsG;
 
  struct Noeud* filsD;
 
}Noeud;
   
 
typedef struct Arbre{
 
  Noeud* racine;
 
}Arbre;
 
typedef struct Cell{
 
  Noeud* n;
 
  struct Cell* suivante;
 
}Cell;
 
typedef struct ListeN{
 
 Cell* tete;
 
 Cell* fin;
 
}ListeN;
 
/*Cette fonction permet de creer une liste de noeud temporaire*/
/*                 */
/*       qui va servir à creer l'arbre syntaxique.            */
/**************************************************************/
 
ListeN creer_liste(char*);
 
 
 
/*Ajoute un noeud a la fin de la liste*/
 
 
 
 
void addtoListe(Noeud*);
 
 
 
 
/*retourne le noeud de tete et le retire de la liste*/  
 
Noeud* grapstoListe();
 
 
 
/*cette creer l'arbre syntaxique a partir d'une liste de noeud qui va etre interpréter*/
 
Arbre creerAbr(ListeN);
 
 
 
 
 
 
/*teste si l'arbre est vide ou c'est une feuille retourne:*/
/*                */  
/* .i!=0 si oui            */
/*                */
/* .i=0 sinon             */
/*                */  
/**********************************************************/          
 
 
int isEmpty(Arbre*);
 
int estFeuille(Arbre*);
 
 
 
#endif

Reply

Marsh Posté le 09-01-2005 à 22:06:30    

et j'ai fais un Tree.c ou j'utilise mes variable externe ops et inputExpression

Reply

Marsh Posté le 09-01-2005 à 22:08:32    

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include "Tree.h"
 
 
 
void isOperande(char c){
 
 extern char ops[6];
 
 int i;
 
 for(i=0;i<5;i++)
 
  if(c==ops[i])
 
   return;
 
  printf("expression non valide\n" );
 
}
 
int readAndTest(){
 
 extern char* inputExpression;
 
 extern int experLength;
 
 char ch[255];
 
 int i=0,j=0;
 
 gets(ch);
 
 inputExpression=ch;
 
 experLength=strlen(ch);
 
 while(inputExpression[i]){
 
  if(inputExpression[i]=='(')
     
   j++;
 
  else if(inputExpression[i]==')')
 
   if(j !=0){
 
     printf("expression non valide\n" );
 
     return 0;
 
   }
 
    else
 
     j++;
 
  else if(!isdigit(inputExpression[i])){
 
    printf("expression non valide\n" );
 
    return 0;
  }
   
  else if(inputExpression[++i])
 
   isOperande(inputExpression[i]);
 
  i++;
 
 }
 
 return 1;
 
}

Reply

Marsh Posté le 09-01-2005 à 22:15:07    

Reply

Marsh Posté le 09-01-2005 à 22:25:21    

merci pour le site mais ça m'aide pas beaucoup tous ça je le connais le probléme je crois que c'est l'editeur de lien...mais je sais pas comment le résoudre

Reply

Marsh Posté le 09-01-2005 à 23:25:38    

Tu sais, il ne faut pas avoir honte: si tu ne comprends pas le lien que je te donne, tu peux l'avouer tout de suite, hein. :) Parce qu'il répond précisément au problème que tu as.
 
Il faut que tu rajoutes "extern" devant le char ops dans le .h, et que tu enlèves le "extern" que tu as mis dans Tree.c.
Car je suppose que tu as un autre fichier .c qui inclus également Tree.h. Et c'est là qu'il y a le conflit...
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed