IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

erreur C / erreur C++ ?


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Par défaut erreur C / erreur C++ ?
    bonjour,

    Réalisant un exercice de thinking in C, j'ai eu une erreur que j'avais du mal à expliquer (je suis débutant).
    J'ai recopié un exemple du même chapitre (le chapitre 6) mettant en oeuvre le même principe et j'ai eu la même erreur.
    Je m'explique : il s'agit d'une classe qui fait appel à des fonctions correctement déclarées dans un header. Voyez ci-dessous.
    Lorsque je crée le projet dans visual C++, j'obtiens à la compilation de tstack.c l'erreur
    'STK_ERROR' : identificateur non déclaré
    "Pourtant" tout me semble correctement déclaré, "par contre" je ne sais pas si c'est correct de faire du C dans un projet C++, dans visual C++, et si ça ne génère justement pas ce type d'erreur (appel de header différent, ...). Je ne suis pas encore au C++, et malgré mes recherches je n'arrive pas à avoir une réponse claire.
    Pouvez vous m'éclairer (merci !).
    le header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* stack.h: Declarations for a stack of ints */
    #define STK_ERROR -32767
    void stk_push(int);
    int  stk_pop(void);
    int  stk_top(void);
    int  stk_size(void);
    int  stk_error(void);
    les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    /* stack.c: implementation */
    #include "stack.h"
     
    /* Private data: */
    #define MAX 10
    static int error = 0;   /* error flag */
    static int data[MAX];   /* the stack */
    static int ptr;         /* stack pointer */
     
    /* Function implementation */
    void stk_push(int x) {
        if (ptr < MAX) {
            data[ptr++] = x;
            error = 0;
        }
        else
            error = 1;
    }
     
    int stk_pop(void) {
        if (ptr > 0) {
            int x = data[--ptr];
            error = 0;
            return x;
        } else {
            error = 1;
            return STK_ERROR;
        }
    }
     
    int stk_top(void) {
        if (ptr > 0) {
            error = 0;
            return data[ptr-1];
        } else {
            error = 1;
            return STK_ERROR;
        }
    }
     
    int stk_size(void) {
        return ptr;
    }
     
    int stk_error(void) {
        return error;
    }
    la classe main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /* tstack.c: Tests the stack of ints */
    #include "stack.h"
    #include <stdio.h>
     
    int main() {
        int i;
     
        /* Populate stack */
        for (i = 0; i < 11; ++i)
            stk_push(i);
        if (stk_error())
            puts("stack error");
        printf("The last element pushed was %d\n",
               stk_top());
     
        /* Pop/print stack */
        while (stk_size() > 0)
            printf("%d ", stk_pop());
        putchar('\n');
        if (!stk_error())
            puts("no stack error");
        return 0;
    }

  2. #2
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Mhhh ton code fonctionne correctement chez moi...

    J'ai bêtement créé un projet win32 console, ensuite j'y ai ajouté les 3 fichiers (avec l'extension .c et .h) et j'ai compilé...

    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    stack error
    The last element pushed was 9
    9 8 7 6 5 4 3 2 1 0
    no stack error

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut et bienvenue sur les forums de developpez.com


    Ton problème viens peut-être du fait que tu as une inclusion multiple de ton fichier d'en-tête et tu ne le protège pas contre ca donc change-le ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* stack.h: Declarations for a stack of ints */
    #ifndef H_STACK_040820071340
    #define H_STACK_040820071340
     
    #define STK_ERROR -32767
     
    void stk_push(int);
    int  stk_pop(void);
    int  stk_top(void);
    int  stk_size(void);
    int  stk_error(void);
     
    #endif
    Cela va empêcher l'inclusion multiple qui peut avoir des conséquence sur la bonne compilation de ton projet. Pour des infos supplémentaire sur cette technique: http://emmanuel-delahaye.developpez....ganiser_source et regarde le sous-chapitre Protection contre les inclusions multiples
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Freed0
    Mhhh ton code fonctionne correctement chez moi...

    J'ai bêtement créé un projet win32 console, ensuite j'y ai ajouté les 3 fichiers (avec l'extension .c et .h) et j'ai compilé...

    Voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    stack error
    The last element pushed was 9
    9 8 7 6 5 4 3 2 1 0
    no stack error
    Oui j'ai peut-être parlé trop vite, ca marche aussi chez moi, même sortie ! Compliation avec GCC 4 sous Linux. Mais mon argument ci-dessus reste quand même valable pour le quotidient
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Yep j'y ai pensé aussi mais j'ai complètement oublié de faire la remarque

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Par défaut
    Merci pour vos réponses rapides.
    En fait mon problème était ailleurs.
    Chacune des classes utilisaient des entètes précompilés ("stdafx.h"), c'est la configuration crée par le wizard.
    J'ai changé la configuration pour "sans utiliser les en-têtes précompilés" et ça fonctionne normalement.
    Sinon la protection contre l'inclusion multiple me semble une bonne voie d'exploration

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Attention a un point très important ! En C on ne parle pas de classes, méthodes ou procédure mais de fonctions tout simplement ! Pour programmer correctement en C il faut savoir parler le C en Français avant tout
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur VB : 'Erreur inattendue; abandon'
    Par sacofan dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/12/2006, 21h28
  2. [erreur postgre] Erreur dans requete
    Par leroidje dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/11/2006, 11h18
  3. [Débutant] DbExpress / "Erreur SQL : Erreur du mappage d'erreurs."
    Par pitango dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/05/2006, 09h53
  4. erreur '48' : erreur de chargement de la DLL
    Par fiby33 dans le forum Access
    Réponses: 1
    Dernier message: 22/02/2006, 19h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo