Posté le 27/01/2016 à 20:42 Membre depuis le 18/06/2001, -26239 message
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
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 27/01/2016 à 20:44 Membre depuis le 10/06/2001, 2213 messages
Il faut mettre struct Qtw_Layout *layout; ou alors tu typedef aussi Qtw_Layout.
Posté le 27/01/2016 à 21:12 Membre depuis le 18/06/2001, -26239 message
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
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 27/01/2016 à 21:27 Membre depuis le 10/06/2001, 2213 messages
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.
Posté le 27/01/2016 à 21:45 Membre depuis le 13/06/2002, 42484 messages
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é).
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)
Posté le 27/01/2016 à 22:21 Membre depuis le 18/06/2001, -26239 message
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...
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 28/01/2016 à 05:02 Membre depuis le 10/06/2001, 44321 messages
À 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.
Posté le 28/01/2016 à 06:29 Membre depuis le 18/06/2001, -26239 message
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
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 28/01/2016 à 09:27 Membre depuis le 16/06/2001, 69242 messages
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.
Posté le 28/01/2016 à 12:15 Membre depuis le 10/06/2001, 44321 messages
Oué, voilà.
Posté le 28/01/2016 à 12:36 Membre depuis le 16/06/2001, 69242 messages
donc OUI je me traine les "struct ure" partout smile
Posté le 28/01/2016 à 12:36 Membre depuis le 10/06/2001, 44321 messages
struct huurr?
Posté le 28/01/2016 à 12:44 Membre depuis le 16/06/2001, 69242 messages
(struct huurr *)(0xb16b00b5)
Posté le 28/01/2016 à 13:15 Membre depuis le 10/06/2001, 44321 messages
(struct huurr *)0x50D0A5EC©
Posté le 13/02/2016 à 11:51 Membre depuis le 11/06/2001, 19563 messages
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 ?