|
|
Auteur
|
Message
|
1
|
|
|
|
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?
|
|
|
|
|
bah faudrait le code
|
|
|
|
|
Euh oui dsl, c'est la première fois que je poste là
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<--
|
|
|
|
|
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
|
|
|
|
|
mince, je me rend compte que j'ai zappé mes connaissances en c
je me demande si c'est pas un probleme de pointeur
|
|
|
|
|
Vu l'erreur, je pensais à un problème avec la fonction
|
|
|
|
|
ha je vois tu rajoute le tableau a ton resultat
|
|
|
|
|
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<--
|
|
|
|
|
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
|
|
|
|
|
J'ai fait ça et ça ne change rien
|
|
|
|
|
essaie resultat+=*(tableau+i) mais je doute
|
|
|
|
|
J'ai essayé, ça ne marche pas
|
|
arriere, band de newbies ^^
|
|
|
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 ^^
|
|
arriere, band de newbies ^^
|
|
|
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")
|
|
|
|
|
Euh j'ai suivi ce que tu m'as dit de faire... et ça marche!!!!!!
Merci beaucoup, j'ai en plus appris quelque chose
|
|
arriere, band de newbies ^^
|
|
|
De rien
|
|
1
|