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;
}