1

yop,

J'ai un problème qui me parait tellement con que ça me fait tourner en bourique.
J'ai ce code :
struct Qtw_Layout;

typedef struct
{
    char* title;
    Qtw_Layout* layout;
    ...
} Qtw_Window;
Pourquoi ai-je cette erreur ? Window.h:10: error: expected specifier-qualifier-list before 'Qtw_Layout' (GCC 4.1.2)
Pourquoi le compilateur aurait-il besoin du détail de la structure pour réserver la taille d'un pointeur ??? J'ai comme l'impression que l'erreur doit être ailleurs, c'est pas possible...

Merci bien pour vos lumières, parce que là je commence à désespérer de moi-même. Même dans mon bouquin de C il y a un exemple de ce type... sorry

2

Il faut mettre struct Qtw_Layout *layout; ou alors tu typedef aussi Qtw_Layout.
So much code to write, so little time.

3

Merci. Oué, certes, j'ai un peu trop simplifié mon exemple en fait. ^^
Bon, je m'explique mieux :

J'ai un header Qtw.h qui ne contient que les fonctions publiques d'une lib, donc je ne voudrais pas y voir la description des structures :
struct Qtw_Window;
...
Qtw_Window* Qtw_CreateWindow(char* title);
Puis un fichier Window.h qui contient la description des structures :
typedef struct
{
    ...
} Qtw_Window;
Et enfin, l'implémentation dans un .c :
#include "Qtw.h"
#include "Window.h"

Qtw_Window* Qtw_CreateWindow(char* title)
{
    ...
}
Ce qui me donne cette erreur, au niveau de la déclaration de Qtw_CreateWindow :
In file included from CreateWindow.c:1:
Qtw.h:20: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token

4

Tu mélanges les namespaces pour les tags (struct Qtw_Window) et les autres identifiants (Qtw_Window* Qtw_CreateWindow(...)).

Soit tu fais simple, sans typedef :
struct Qtw_Window;
struct Qtw_Window *Qtw_CreateWindow(...)
struct Qtw_Window { ... };

Soit tu mets tes typedefs partout (sauf pour la definition, je crois), ce qui revient à dupliquer tes tags dans ton namespace global. Perso, je n'ai jamais fais ça, parce que ça a quelques inconvénients dont le fait d'être plus compliqué à mettre en oeuvre.
So much code to write, so little time.

5

Sinon tu compiles en C++ même si ton code est du "presque C", comme ça tu peux t'affranchir du struct partout sans avoir besoin du typedef (mais bon, c'est triché).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

G++4TI ? cheeky Et oui, c'est pas la première fois que je me fais avoir par cette redondance nécessaire de struct sad

Merci à vous. smile

ps -> in fine, ça marche, mais c'est pas très élégant, en plus d'être peu intuitif quand on s'amuse pas à ça tous les jours...

7

À la rigueur je ne sais même pas si c'est une bonne idée de vouloir utiliser des typedef dans ce genre de cas. En effet ça complique pour pas grand chose.

8

J'ai écrit les deux solutions, je préfère celle sans le struct qui se ballade partout. Les deux solutions sont moches en C99 sad

9

je n'utilise JAMAIS de typedef struct, d'une, parce que ces namespaces de noms me saoule, et de deux, parce que quand je déclare une variable plopplop j'aime bien savoir si c'est un entier/pointeur ou bien un record.

10

Oué, voilà.

11

donc OUI je me traine les "struct ure" partout smile

12

struct huurr?

13

14

(struct huurr *)0x50D0A5EC©

15

Heu... Je suis un peu en retard, mais j'ai pas compris le problème.

Dans le Qtw.h:
typedef struct Qtw_Window_s Qtw_Window;;

Dans le Window.h:
struct Qtw_Window_s
{
...
};

ça suffit, non ?