Création
d'entreprise
Posez votre question Signaler

Include et headers en langage C [Résolu]

Maknash 665Messages postés 10 septembre 2007Date d'inscription 6 mai 2011Dernière intervention - Dernière réponse le 10 mars 2010 à 22:46
Bonjour,
Dans le cadre d'un projet pour l'école, je dois créer un programme de gestion d'un camping.
J'ai donc créé un main contenant des appels à des fonctions dont les prototypes font partie d'un header.
Dans le main, j'ai mis un #include "header.h" et dans le header.h, il y a aussi 2 includes (myconio.h et stdio.h).
Quand je fais appel à une fonction à partir du main, il va rechercher dans le header le prototype et ensuite il appel la fonction.
Mais le myconio n'est pas reconnu dans le source contenant les fonctions, donc il me dit que les fonctions genre MYclrwin ne sont pas reconnues.
Si je mets un #include <myconio.h> dans le source des fonctions, il râle car il est déjà placé dans le header.h.
Le pire, c'est que ça fonctionnait très bien avant, et je ne sais pas ce que j'ai changé pour qu'il plante comme ça.
Pouvez-vous m'aider svp?
Merci d'avance
Lire la suite 

Include et headers en langage C »

27 réponses
Réponse
+0
moins plus
Salut


Il te faut utiliser dans les fichiers où tu dois utiliser myconio.h

#ifndef MYCONIO
#define MYCONIO
#include <myconio.h>
#endif

Voir : http://www.siteduzero.com/tutoriel-3-14033-le-preprocesseur.html#ss_part_4 : #ifndef pour éviter les inclusions infinies.


Salutations

cornalin
fiddy- 10 mars 2010 à 21:15
Non. Il faut plutôt utiliser #ifndef MYCONIO... dans le header myconio.h.
Maknash- 10 mars 2010 à 21:18
Il y est déjà il me semble, de toute façon je ne peux pas modifier le myconio.h...
Ajouter un commentaire
Réponse
+0
moins plus
Merci pour ta réponse rapide.
Je viens d'essayer et de lire ce que tu m'as donné.
Ca me met toujours les mêmes erreurs.
Si j'ai bien compris, j'ai mis dans mon fichier design.c
#ifndef MYCONIO
#define MYCONIO
#include <myconio.h>
/* mon code */
#endif


et dans header.h
#ifndef MYCONIO
#define MYCONIO
#include <myconio.h>
/* mes prototypes */
#endif


Ai-je mal compris ou fait quelque chose de travers?
Ajouter un commentaire
Réponse
+0
moins plus
Salut


/*mon code*/

/*mes prototypes*/

doivent être après le #endif

Salutations.

cornalin
fiddy- 10 mars 2010 à 21:25
Non, le #endif se met bien tout à la fin.
La protection se fait au niveau du fichier, pas au niveau du define.
Ajouter un commentaire
Réponse
+0
moins plus
Ca me génère de toute façon l'erreur aussi.
Code::Blocks devient fou, je ne comprends vraiment pas, au début ça ne faisait pas ça...
Ajouter un commentaire
Réponse
+0
moins plus
Bonsoir,

Que contient myconio.h ? C'est toi qui l'as écris ?
Sinon il s'agit peut-être d'une inclusion infinie, dans ce cas, il faut mettre :
#ifndef NOMDUFICHIER_H
#define NOMDUFICHIER_H
/*tout ton code*/
#endif

Et tu le fais pour tous tes header.
Par exemple, pour ton fichier myconio.h
#ifndef MYCONIO_H
#define MYCONIO_H
...
#endif

Bien sûr, tu peux choisir ta propre convention de nommage.

Je te conseille avant tout de mettre poster le message d'erreur que tu obtiens. Le message d'erreur indique une bonne piste généralement.
Ajouter un commentaire
Réponse
+0
moins plus
Je viens de voir que c'est pas MYCONIO mais _MYCONIO_H qu'il est mis dans le myconio.h.
Quand je remplaces avec ça, ça me met des autres erreurs, me disant que je n'ai pas déclaré les LIGHTGRAY etc...
Ajouter un commentaire
Réponse
+0
moins plus
Non non le myconio.h est téléchargé sur le net. On utilise ça à l'école donc je ne peux rien modifier là-dedans...
Voici le myconio.h :
// Nom du fichier : myconio.h
// Auteur : prof.geii37@laposte.net
// Version : Novembre 2004
// Objectif : remédier à l'absence de certaines fonctions conio sous DevC++

/* Remarques :
    - Dev-C++ possède déjà une bibliothèque conio dans laquelle les fonctions
      « getch », « getche », « kbhit », « putch » et « ungetch » sont codées.
    - « textmode n'a pas été réécrite car les modes d'affichage prévus sous DOS
      n'ont pas de sens dans une fenêtre console Windows.
    - « window » n'a pas pu être écrite... seule une fonction « MYclrwin » a été
      codée pour remplacer l'appel de « window » suivi d'un « clrscr ».
      Toutefois la zone d'écriture à l'écran n'est pas limitée.
    - « MYwindow » redimensionne la fenêtre de la console.
      A noter : le comportement de cette fonction n'a aucun rapport avec celui
      de « window » de conio.
*/

#ifndef _MYCONIO_H_
#define _MYCONIO_H_

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#include <stdarg.h>
#include <windef.h>
#include <winbase.h>
#include <wincon.h>

#ifdef __cplusplus
extern "C" {
#endif

struct text_info {
    unsigned char winleft;
    unsigned char wintop;
    unsigned char winright;
    unsigned char winbottom;
    unsigned char attribute;
    unsigned char normattr;
    unsigned char currmode;
    unsigned char screenheight;
    unsigned char screenwidth;
    unsigned char curx;
    unsigned char cury;
};

enum COLORS { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
              DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED,
              LIGHTMAGENTA, YELLOW, WHITE } ;

#define _NOCURSOR      0
#define _SOLIDCURSOR   1
#define _NORMALCURSOR  2
#define C40 1

void _setcursortype(int type);
char *cgets(char *str);
void clreol();
void clrscr();
void delline();

#define cprintf printf
#define cscanf scanf
/* Les fonctions « cprintf » et « cscanf » n'ont pas été réécrites, ceci est
   peut-être une erreur...
   En effet, « scanf » lit les données à partir de « stdin » et les fonctions
   d'entrée de la console lisent les données à partir de « STD_INPUT_HANDLE ».
   Or il semblerait que « fflush(stdin) ; » n'ait pas le même effet que
   « FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)) ; »...
   A suivre... */

int cputs(const char *str) ;

int Gettext(int left, int top, int right, int bottom, void *destin) ;
#define gettext Gettext
/* Cette astuce a dû être utilisée car la ligne
   « int gettext(int left, int top, int right, int bottom, void *destin) ; »
   produit un message d'erreur (sous Dev-C++) ! */

void gettextinfo(struct text_info *_r);

int MYgetch(void) ;
int MYgetche(void) ;
/*  « getch », « getche » sont déjà définies dans <conio.h> (mingw). Cependant,
    au même titre que « getchar » (stdio) ne consomme pas le caractère <CR>,
    elles ne consomment pas le caractère saisi par l'utilisateur (c'est à dire :
    elles n'enlèvent pas le caractère du buffer d'entrée). « MYgetch »,
    « MYgetche » vident le buffer. Attention, « MYgetch » et « MYgetche »
    n'enlèvent pas un caractère, mais tous les caractères disponibles. Grâce
    aux directives « #define » inclus dans MYconio.cpp, ce sont les fonctions
    « MYgetch » et « MYgetche » qui seront appelées si dans un source on fait
    appel à « getch » ou « getche ». */

void gotoxy(int x, int y);

void highvideo();
void insline();
// kbhit : OK déjà défini dans <conio.h> (mingw)
void lowvideo();
int movetext(int left, int top, int right, int bottom, int destleft, int desttop);
void normvideo();
// putch : OK déjà défini dans <conio.h> (mingw)
int puttext(int left, int top, int right, int bottom, void *source);

void textattr(int _attr);
void textbackground(int _color);
void textcolor(int _color);
/* BLINK (clignotement) ne fonctionne pas ! Par contre, il est possible
   d'utiliser les oucleurs LIGHT pour le fond d'écran, ce qui n'est pas le cas
   pour une application DOS.*/

/* « void textmode(int _mode); » n'a pas été réécrite, car  les modes
   d'affichage DOS n'ont aucun sens dans une application console Windows. */
// ungetch : OK déjà défini dans <conio.h> (mingw)
int wherex();
int wherey();

void MYclrwin(int left, int top, int right, int bottom); // efface une zone
/* La fonction « window » de conio est fréquemment utilisée (suivi de
   « clrscr ») pour effacer une zone de l'écran et modifier sa couleur en
   fonction des attribus mis à jour par « textcolor » ou « textbackground ».
   « MYclrwin » permet cela, mais elle n'interdit pas d'écrire en dehors
   de cette zone.*/

void MYwindow(int left, int top, int right, int bottom);
/* « MYwindow » permet de redimensionner la fenêtre de la console. Cependant,
   ce comportement, n'est pas celui de la fonction « window » de conio */

// void window(int left, int top, int right, int bottom);

#ifdef __cplusplus
}
#endif

#include <myconio.cpp>
#endif  //_MYCONIO_H_
Ajouter un commentaire
Réponse
+0
moins plus
Effectivement, il ne faut pas le modifier (c'est pour ça que je te demandais sa provenance).
De toute façon, tu constates qu'il y a bien le #ifndef #define ... #endif. Je rinsiste pour te dire que tu peux mettre le nom que tu veux (à toi de choisisr ta convention).

Par contre, sauf erreur de ma part, tu n'as toujours pas mis le message d'erreur retourné par ton compilateur...
Ajouter un commentaire
Réponse
+0
moins plus
En fait, je ne vois pas trop pourquoi mais le define du myconio.h se trouvant dans le header.h porte sur le main mais pas sur le design.c.

Voici les messages d'erreurs :
D:\Documents and Settings\Kevin\Mes documents\Informatique\ISAT\Projet C\2010\camping\design.c:5: warning: implicit declaration of function `textbackground'
D:\Documents and Settings\Kevin\Mes documents\Informatique\ISAT\Projet C\2010\camping\design.c:5: warning: implicit declaration of function `MYclrwin'
D:\Documents and Settings\Kevin\Mes documents\Informatique\ISAT\Projet C\2010\camping\design.c:6: warning: implicit declaration of function `textcolor'
D:\Documents and Settings\Kevin\Mes documents\Informatique\ISAT\Projet C\2010\camping\design.c:13: error: `LIGHTGRAY' undeclared (first use in this function)
D:\Documents and Settings\Kevin\Mes documents\Informatique\ISAT\Projet C\2010\camping\design.c:13: error: (Each undeclared identifier is reported only once
D:\Documents and Settings\Kevin\Mes documents\Informatique\ISAT\Projet C\2010\camping\design.c:13: error: for each function it appears in.)
D:\Documents and Settings\Kevin\Mes documents\Informatique\ISAT\Projet C\2010\camping\design.c:13: warning: implicit declaration of function `gotoxy'
:: === Build finished: 3 errors, 4 warnings ===
Ajouter un commentaire
Réponse
+0
moins plus
Tu as bien enlevé le #ifndef... du design.c ?
Maknash- 10 mars 2010 à 21:46
Bah oui, la preuve dans mon source
Ajouter un commentaire
Réponse
+0
moins plus
Voici mes sources si besoin est :
Le main:
#include "headers\header.h"
#define N 5

int main(void)
{
    int i, ok, lig;
    char car, pass[N];

    design(1,1,80,25, DARKGRAY, WHITE);
    printf("Coucou beuh!");
    design(1,5,80,23, WHITE, BLACK);

    affichPassword();

    for(i=0;i<N && (car=getch())!='\r';i++) { pass[i]=car; printf("*"); }
    pass[i]='\0';

    ok=password(pass);
    switch(ok)
    {
        case -1 : textcolor(LIGHTGREEN); printf("\nBienvenue root"); break;
        case 0 : textcolor(LIGHTRED); printf("\nErreur : Mauvais mot de passe. Vous n'etes pas autorise a entrer !"); break;
        case 1 : textcolor(LIGHTBLUE); printf("\nBienvenue user");
    }

    return 0;
}


Le design:
#include <stdio.h>

void design(unsigned short l, unsigned short t, unsigned short r, unsigned short b, unsigned short bgcolor, unsigned short txtcolor)
{
    textbackground(bgcolor); MYclrwin(l,t,r,b);
    textcolor(txtcolor);
}

void affichPassword(void)
{
    int i, lig;

    textcolor(LIGHTGRAY); gotoxy(10,9); printf("%c",218);
    for(i=0;i<60;i++) printf("%c",196);
    printf("%c",191);

    for(i=0, lig=10;i<8;i++,lig++)
    {
        gotoxy(10,lig); printf("%c",179);
    }
    gotoxy(10,18); printf("%c",192);

    printf("Entrez le mot de passe svp : ");
}


Le header.h
#include <stdio.h>
#include <myconio.h>

void design(unsigned short l, unsigned short t, unsigned short r, unsigned short b, unsigned short bgcolor, unsigned short txtcolor);
void affichPassword(void);
short password(char pass[5]);


Voilà, tout n'est pas complet évidement vu que c'est seulement le début pour le moment...
Ajouter un commentaire
Réponse
+0
moins plus
Dans ton design.c, tu utilises des fonctions définies dans myconio.h et pourtant tu ne l'inclues pas dans ton design.h. D'où les avertissements que tu as reçus.
De plus (ça ne règlera pas le problème), l'astuce du #ifndef NOMDUFICHIER doit être faite sur tous les fichiers header, c'est une bonne habitude à prendre. Relis mon post #7 qui explique ceci.

Et reposte tes éventuels messages d'erreur s'il en reste.
fiddy- 10 mars 2010 à 22:44
Oui, mais dans ce cas, faut compiler le myconio.cpp pour en faire un myconio.o ou en créer une bibliothèque comme tu as fait. Sinon ça ne peut pas marcher.
Quoiqu'il en soit, si maintenant ça marche, c'est le principal. Tu peux mettre en résolu ;-))).
Maknash- 10 mars 2010 à 22:46
Ah oui je comprends mieux.... En compilant myconio ça aurait été aussi^^
Bien merci de m'avoir éclairé et de m'avoir aidé, ça fait toujours plaisir :-)

Et oui j'ai mis résolu juste avant de voir ton message lol
MaknashMaknash - 10 mars 2010 à 22:28
Voilà, j'ai créé ma librairie que j'ai appelé conioplus.a et ainsi ça marche.
Pour ceux qui veulent savoir comment le faire, voici un résumé :

Créer un conioplus.h
#ifndef CONIO
#define CONIO
#include <conio.h>

void clreol(void);
void clrscr(void);
void delline(void);
void textattr(int _attr);
void textbackground(int _color);
void textcolor(int _color);
int wherex(void);
int wherey(void);
void MYclrwin(int left, int top, int right, int bottom);
void gotoxy(int x, int y);

enum COLORS { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
              DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED,
              LIGHTMAGENTA, YELLOW, WHITE } ;
#endif

Donc dedans, j'inclus conio.h pour les fonctions de bases du conio.h tout simplement, je mets les prototypes des fonctions du myconio.h dont j'ai besoin, je fais un enum avec les couleurs disponibles...

Après, il faut créer un source conioplus.c, et y mettre les fonctions dont vous avez besoin, en faisant bien attention aux dépendances (par exemple ici, j'avais eu un problème car j'avais mis le gotoxy, le wherey et le wherex dans le fond, du coup vu que certaines fonctions en ont besoin, ça foirait).
Il faut donc ouvrir un projet de "Static Library" (sous C::B).
Voici mon source :
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#include <stdarg.h>
#include <windef.h>
#include <winbase.h>
#include <wincon.h>

void gotoxy(int x, int y) {
  COORD c ;
  c.X = x - 1;
  c.Y = y - 1;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}

int wherex() {
  CONSOLE_SCREEN_BUFFER_INFO Info;
  GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Info);
  return Info.dwCursorPosition.X + 1 ;
}

int wherey() {
  CONSOLE_SCREEN_BUFFER_INFO Info;
  GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Info);
  return Info.dwCursorPosition.Y + 1 ;
}

void clreol()
{
  COORD coord = {wherex() - 1 , wherey() - 1};
  DWORD dwWritten;
  HANDLE hScreen=GetStdHandle(STD_OUTPUT_HANDLE) ;
  CONSOLE_SCREEN_BUFFER_INFO Info;

    if(GetConsoleScreenBufferInfo(hScreen, &Info))
    {
        FillConsoleOutputCharacter (hScreen, ' ', Info.dwSize.X-coord.X, coord,
                        &dwWritten);
        FillConsoleOutputAttribute (hScreen, Info.wAttributes,
                        Info.dwSize.X-coord.X, coord, &dwWritten);
        gotoxy (coord.X, coord.Y) ;
    }
}

void clrscr(void) // efface l'écran
{
  // Première solution :         OK !
  COORD coord = { 0, 0 } ; //  coord.X = 0;  coord.Y = 0;
  DWORD dwWritten, dwSize ;
  HANDLE hScreen=GetStdHandle(STD_OUTPUT_HANDLE) ;
  CONSOLE_SCREEN_BUFFER_INFO Info;

  if(GetConsoleScreenBufferInfo(hScreen, &Info))
  {
      dwSize = Info.dwSize.X * Info.dwSize.Y ;
      FillConsoleOutputCharacter (hScreen, ' ', dwSize, coord, &dwWritten);
      FillConsoleOutputAttribute (hScreen, Info.wAttributes, dwSize, coord,
                  &dwWritten);
      gotoxy (1, 1);
  }
  /* Seconde solution : moins efficace - nécessite plus de temps
                      - ne prend pas en compte les couleurs */
  /*
  system("cls") ;
  */
}

void delline()
{
    int y=wherey() ;
    HANDLE hScreen = GetStdHandle(STD_OUTPUT_HANDLE) ;
    CONSOLE_SCREEN_BUFFER_INFO Info ;
    GetConsoleScreenBufferInfo(hScreen, &Info) ;
    {
        COORD dwBufferSize={Info.dwSize.X, Info.dwSize.Y - y} ;
        COORD dwBufferCoord={0, 0} ;
        CHAR_INFO Buffer[dwBufferSize.Y][dwBufferSize.X] ;
        SMALL_RECT ReadRegion[2] ;
        ReadRegion[0].Left = 0 ;
        ReadRegion[0].Right = Info.dwSize.X-1 ;
        ReadRegion[0].Top = y ;
        ReadRegion[0].Bottom = Info.dwSize.Y-1 ;

        ReadConsoleOutput(hScreen, (CHAR_INFO*)Buffer, dwBufferSize,
                        dwBufferCoord, ReadRegion) ;
        ReadRegion[0].Top = y-1 ;
        ReadRegion[0].Bottom = Info.dwSize.Y-2 ;
        WriteConsoleOutput(hScreen, (CHAR_INFO*)Buffer, dwBufferSize,
                        dwBufferCoord, ReadRegion) ;
    }
}

void textattr(int _attr) {
  SetConsoleTextAttribute (GetStdHandle(STD_OUTPUT_HANDLE), _attr);
}

void textbackground(int _color) {
  CONSOLE_SCREEN_BUFFER_INFO Info ;
  GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Info) ;
  textattr((Info.wAttributes & 0x0F) | (_color<<4));
}

void textcolor(int _color) {
  CONSOLE_SCREEN_BUFFER_INFO Info ;
  GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &Info) ;
  textattr((Info.wAttributes & 0xF0) | _color);
}

void MYclrwin(int left, int top, int right, int bottom)
// efface une zone de l'écran
{
  int i ;
  COORD dwCoord = {0, 0} ;
  COORD dwSize = {(right-left+1),(bottom-top+1)} ;
  HANDLE hScreen=GetStdHandle(STD_OUTPUT_HANDLE) ;
  CHAR_INFO Buffer[dwSize.X*dwSize.Y] ;
  SMALL_RECT Region[2] ;
  CONSOLE_SCREEN_BUFFER_INFO Info;

  if(GetConsoleScreenBufferInfo(hScreen, &Info))
  {
      for(i=0 ; i < dwSize.X*dwSize.Y ; i++)
      {
            Buffer[i].Char.AsciiChar=' ' ;
            Buffer[i].Attributes = Info.wAttributes ;
      }
      Region[0].Left = left-1 ;
      Region[0].Right = right-1 ;
      Region[0].Top = top-1 ;
      Region[0].Bottom = bottom-1 ;
      WriteConsoleOutput(hScreen, (CHAR_INFO*) Buffer, dwSize, dwCoord, Region) ;
      gotoxy (left, top);
  }

}


Ensuite, quand vous aurez besoin de l'utiliser, il faut renseigner au linker la nouvelle librairie.
Pour ce, sous C::B, il faut faire cette petite manip :
Projet -> Build options... -> Linker settings -> Add -> C:\votre\repertoire\de\projet\votrelib.a


J'espère que ceci est très clair et simple à comprendre.

Merci à ceux qui m'ont aidé
Ajouter un commentaire
Réponse
+0
moins plus
J'ai testé un autre truc, j'ai créé un fichier design.h et j'ai mis les #ifndef et tout ça dedans, y compris dans le header.h.
Et voici les messages d'erreurs maintenant :
:C:\MinGW\include\myconio.cpp:20: multiple definition of `_setcursortype'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:20: first defined here
:C:\MinGW\include\myconio.cpp:30: multiple definition of `cgets'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:30: first defined here
:C:\MinGW\include\myconio.cpp:54: multiple definition of `clreol'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:54: first defined here
:C:\MinGW\include\myconio.cpp:71: multiple definition of `clrscr'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:71: first defined here
:C:\MinGW\include\myconio.cpp:93: multiple definition of `cputs'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:93: first defined here
:C:\MinGW\include\myconio.cpp:98: multiple definition of `delline'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:98: first defined here
:C:\MinGW\include\myconio.cpp:135: multiple definition of `MYgetche'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:135: first defined here
:C:\MinGW\include\myconio.cpp:147: multiple definition of `Gettext'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:147: first defined here
:C:\MinGW\include\myconio.cpp:174: multiple definition of `gettextInfo'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:174: first defined here
:C:\MinGW\include\myconio.cpp:197: multiple definition of `highvideo'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:197: first defined here
:C:\MinGW\include\myconio.cpp:204: multiple definition of `insline'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:204: first defined here
:C:\MinGW\include\myconio.cpp:230: multiple definition of `lowvideo'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:230: first defined here
:C:\MinGW\include\myconio.cpp:237: multiple definition of `movetext'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:237: first defined here
:C:\MinGW\include\myconio.cpp:259: multiple definition of `normvideo'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:259: first defined here
:C:\MinGW\include\myconio.cpp:264: multiple definition of `puttext'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:264: first defined here
:C:\MinGW\include\myconio.cpp:293: multiple definition of `textbackground'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:293: first defined here
:C:\MinGW\include\myconio.cpp:299: multiple definition of `textcolor'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:299: first defined here
:C:\MinGW\include\myconio.cpp:319: multiple definition of `MYclrwin'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:319: first defined here
:C:\MinGW\include\myconio.cpp:346: multiple definition of `MYwindow'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:346: first defined here
:C:\MinGW\include\myconio.cpp:289: multiple definition of `textattr'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:289: first defined here
:C:\MinGW\include\myconio.cpp:190: multiple definition of `gotoxy'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:190: first defined here
:C:\MinGW\include\myconio.cpp:311: multiple definition of `wherey'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:311: first defined here
:C:\MinGW\include\myconio.cpp:305: multiple definition of `wherex'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:305: first defined here
:C:\MinGW\include\myconio.cpp:123: multiple definition of `MYgetch'
obj\Debug\main.o:C:\MinGW\include\myconio.cpp:123: first defined here
:: === Build finished: 48 errors, 0 warnings ===
Ajouter un commentaire
Ce document intitulé « Include et headers en langage C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?