bonjour tout le monde,
j'ai un petit problème concernant un programme, en effet lorsque je compile il ne détecte aucune erreur mais le 'hic' c'est qu'il n'y aucune exécution, aucune console ne s'affiche
j'ai partagé le programme en trois fichiers
voici le fichier.h:
#ifndef FONCTIONS_H
#define FONCTIONS_H
#include <iostream>
using namespace std;
const int MAX=100;
int saisie(char [], const int MAX);
void maj(const char[]);
void crypt(const char[],int);
void decrypt(const char[],int);
#endif
voici le fichier de définition de fonction( pour l'instant je n'ai que la première fonction)
#include "fonctions.h"
int saisie(char tableau[], const int MAX)
{
int nbcar=0,rep;
char uncar;
cout<<" Saisissez des caracteres et terminez par *(max 100 caractères)"<<endl;
cin.get(uncar);
while(uncar='*'&& nbcar<MAX)
{
tableau[nbcar]=uncar;
nbcar++;
cin.get(tableau[uncar]);
}
if(uncar=='*')
{
cout<<"saisie termine"<<endl;
}
else
{
cout<<" plus de place, saisie stoppee"<<endl;
}
return (nbcar);
et voici un programme principal(je ne fais appel qu'à la première fonction pour la tester)
#include "fonctions.cpp"
int main()
{
char tab[MAX];
int cle;
cout<<" Bonjour"<<endl;
cout<<saisie(tab,MAX);
return 0;
}
et voici le message que j'obtiens:
Project : Console application
Compiler : GNU GCC Compiler (called directly)
Directory : Z:\PROJETS\mp3\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.cpp
Compiling: fonctions.cpp
Linking console executable: Z:\PROJETS\mp3\console.exe
.objs\fonctions.o:fonctions.cpp.text+0x100): multiple definition of `saisie(char*, int)'
.objs\main.o:main.cpp.text+0x100): first defined here
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 2 seconds)
merci d'avance pour votre aide
salut,
On ne doit pas mettre de using namespce std dans un *.h ...
Tes constantes il est préférable de les initialisé comme ceci : #define MAX 100 dans le *.h
le problème est probablement le test avec '=' au lieu de '==' dans le while.
L'operateur = renvoie la valeur affectée: ici '*' qui n'est pas nul. En C (ou C++) tout ce qui n'est pas nul n'est pas faux. Donc la condition d'arrêt n'est jamais atteinte !
Pour le compilateur, c'est parce que ton prototype dans le .h n'est pas déclaré 'extern':
extern in saisie (...);
Du coup, tous le fichiers .cpp compilés qui ont inclut ton .h ont une fonction saisie. Elle est référencée dans chaque .o produit par cette compilation. A l'édition de liens, ces définitions multiples sont considérées comme des erreurs. En effet, laquelle appeler ?
correction:
extern int saisie(...);
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :