01net    Web


Actuellement en ligne : 686 Utilisateurs dont 38 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> Problème de status 1 renvoyé avec un tout petit programme
Auteur
Message
 
<     1       >
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 08:23:52  
Voter pour ce message
Salut! Je commence à programmer, et j'ai voulu faire un programme avec une fonction servant à faire la somme des nombres contenus dans un tableau.
J'ai donc fait un petit programme avec 3 fichiers (sommeDuTableau.c, sommeDuTableau.h, et main.c). Au moment de la compilation, tout se passe bien, sauf que je ne peut pas voir mon programme (il ne se lance pas). Dans mon log de compilation, j'ai ça :
Project : Console application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\Alex\Mes documents\Prog\tableau\somme\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
Linking console executable: C:\Documents and Settings\Alex\Mes documents\Prog\tableau\somme\console.exe
.objs\main.o:main.c:(.text+0x0): multiple definition of `somme'
.objs\sommeDuTableau.o:sommeDuTableau.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)


Pouvez-vous me dire d'où vient le problème svp?
Beno@
  
  :-)
      ?   @     Posté le 27/07/2006 10:04:32  
Voter pour ce message
bah faudrait le code :D
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 10:17:50  
Voter pour ce message
Euh oui dsl, c'est la première fois que je poste là :fume:
Donc :
main.c :

#include <stdio.h>
#include <stdlib.h>
#include "sommeDuTableau.c"


int main(int argc, char *argv[])
{
long tailleTableau = 5;
long tableau[5] = {5, 28, 65, 89, 2};
printf("%ld", somme(tableau, tailleTableau));
return 0;
}


sommeDuTableau.c :

#include <stdio.h>
#include <stdlib.h>
#include "sommeDuTableau.h"

long somme(long tableau[], long tailleTableau)
{
long resultat = 0; // On initialise la variable qui aura la valeur du résultat
long i = 0; // On initialise le compteur qui servira a ne prendre que les nombres du tableau
for (i = 0; i < tailleTableau; i++);
{
resultat = resultat + tableau[ i ]; /* On incrémentera le résultat de la valeur de chaque nombre du
tableau */
}
return resultat; // On renvoie le résultat final
}



sommeDuTableau.h :

/*
sommeDuTableau.h
-----------

Par Alex
Dernière modification : 26/07/06

Description : Effectue une somme des nombres contenus dans un tableau

*/


long somme(long tableau[], long tailleTableau);

-->Message édité par Alexfun13 le 27/07/2006 13:01:08<--
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 11:20:29  
Voter pour ce message
Je viens de faire un autre petit truc avec 3 fichiers pour copier le contenu d'un tableau dans un autre et toujours la même erreur :/
Beno@
  
  :-)
      ?   @     Posté le 27/07/2006 12:51:45  
Voter pour ce message
mince, je me rend compte que j'ai zappé mes connaissances en c :S

je me demande si c'est pas un probleme de pointeur :/
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 12:52:57  
Voter pour ce message
Vu l'erreur, je pensais à un problème avec la fonction :/
Beno@
  
  :-)
      ?   @     Posté le 27/07/2006 12:54:08  
Voter pour ce message
ha je vois tu rajoute le tableau a ton resultat :S
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 12:58:23  
Voter pour ce message
Quand j'ai recopié le code, le [ i ] a mis le reste en italique sans afficher [ i ], c'est donc : sommeDuTableau.c : resultat = resultat + tableau[ i ]
-->Message édité par Alexfun13 le 27/07/2006 13:00:05<--
Minus-et-Cortex
  
   
      ?   @     Posté le 27/07/2006 13:22:19  
Voter pour ce message
Salut !

Pour éviter redéfinition de somme, tu devrais enlever
#include "sommeDuTableau.c"
et remplacer par
#include "sommeDuTableau.h"

et voir si ca compile.

@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 13:24:45  
Voter pour ce message
J'ai fait ça et ça ne change rien :(
Beno@
  
  :-)
      ?   @     Posté le 27/07/2006 15:43:21  
Voter pour ce message
essaie resultat+=*(tableau+i) mais je doute :/
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 15:45:25  
Voter pour ce message
J'ai essayé, ça ne marche pas :(
icare_olivier
  arriere, band de newbies ^^
  :-)
      ?   @     Posté le 27/07/2006 15:55:35  
Voter pour ce message
Faut pas include de fichiers .c, car ils seront compilés 2 fois.
Jexplique vite fait :
Un include est tout simplement comme un copier coller... quand tu fais #include "fichier.h", cest comme si tu faisais copier coller de ton fichier.h à lendroit de ton include.
Le compilateur compile tous les fichiers terminant par .c ou .cpp, et il ne compile pas les .h (ca naurrait aucun sens...Bref)
Le compilo, une fois quil a vérifié la syntaxe et tout le tuti, crée des "objets", qui correspondent aux variables définies, aux classes, aux fonctions...Etc, quil stocke dans les fichiers temporaires de compilation.

Ensuite, vient le linkage... qui regroupe tous les objets pour en faire un executable. Ton probleme vient surement de la :

Quant tu inclus le fichier somme.c dans main.c, tous les objets définis dans somme.c seront AUSSI definis dans main.c, dou lerreur de link : multiple definition of "somme" (qui est ta fonction somme, definie dans somme.c et main.c)

Pour eviter cette erreur : les .h inclus dans plusieurs fichiers doivent uniquement contenir :
-des definitions de classes
-des definitions de fonctions sans le corps
cad : long somme( args...... ) ; et non long somme(args...){blabla;}
le corps de la fonction doit etre dans un .c... linteret de la déclarer dans le .h : les autres .c conaissent son existence ^^
-etc... mais pas de corps de fonctions


désolé si je suis pas clair ^^
icare_olivier
  arriere, band de newbies ^^
  :-)
      ?   @     Posté le 27/07/2006 15:59:11  
Voter pour ce message
Hum, javais pas vu le message de minus et cortex

Salut !

Pour éviter redéfinition de somme, tu devrais enlever
#include "sommeDuTableau.c"
et remplacer par
#include "sommeDuTableau.h"

et voir si ca compile.

@+


Et tu dis que ca marche pas apres ?
Tu as la MEME erreur ? (multple definition of "somme")
Alexfun13
  
  :-)
      ?   @     Posté le 27/07/2006 16:01:00  
Voter pour ce message
Euh j'ai suivi ce que tu m'as dit de faire... et ça marche!!!!!!
Merci beaucoup, j'ai en plus appris quelque chose :)
icare_olivier
  arriere, band de newbies ^^
  :-)
      ?   @     Posté le 27/07/2006 16:05:21  
Voter pour ce message
De rien :)
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> Problème de status 1 renvoyé avec un tout petit programme

Aller à :

Page générée en : 0.123s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Suite de sécurité
AVG Internet Security vous assure une protection complète contre toutes les menaces du web.
Jeux
Mystery Case File : Recueillir des indices et résoudre des crimes vous passionne  ? Télécharger !