Jump to content

Pourquoi cet enc*$^ù de compilateur me jette ?


Recommended Posts

Posted

typedef struct point

{

char el;

struct point *fg;

struct point *fd;

} noeud;

Je crois me rappeler que sous GCC/Solaris, ça compilait, et là sous visual C++ ça compile pas...

MS qui as pris des liberté avec ANSI???

Posted

Essaie


typedef struct point 

{ 

  char el; 

  point *fg; 

  point *fd; 

} noeud;

Peut etre que VC++ prend le struct comme un typedef par défaut et est pas content paske tu defini 3 fois la struct 'point'.

Sinon c'est quoi le message d'erreur ?

PS: C'est clair que MS a pris plein de libertés avec Visual C++ et c'est encore pire avec le .NET, donc faut se méfier.

Posted

Le message d'erreur, c'est un truc genre redefinition type...

Vu qu'il me fais chier... retour sur TX/Solaris/GCC... et ça a été...

merci bien...

Et VisualC++ : :hellofuck: :roll:

Posted
Essaie


typedef struct point 

{ 

  char el; 

  point *fg; 

  point *fd; 

} noeud;

Peut etre que VC++ prend le struct comme un typedef par défaut et est pas content paske tu defini 3 fois la struct 'point'.

Sinon c'est quoi le message d'erreur ?

PS: C'est clair que MS a pris plein de libertés avec Visual C++ et c'est encore pire avec le .NET, donc faut se méfier.

Je viens d'essayer avec VC++ (.NET) et aucun message d'erreur n'apparait, que ce soit "struct point *" ou "point *"... Peut-être l'erreur est-elle ailleurs ? M'enfin, si avec gcc ça marche tout va bien :o)

Posted

Je n'utilises jamais de structures récursives en général. Mais si c'est censé etre un pointeur sur une structure de type struct point, je pense que ce serait plutôt :


typedef struct point 

{ 

  char el; 

  struct point *fg; 

  struct point *fd; 

} noeud;

ou


typedef struct point 

{ 

  char el; 

  noeud *fg; 

  noeud *fd; 

} noeud;

Mais pas sûr du tout.

Posted

Je viens d'essayer avec VC++ (.NET) et aucun message d'erreur n'apparait, que ce soit "struct point *" ou "point *"... Peut-être l'erreur est-elle ailleurs ? M'enfin, si avec gcc ça marche tout va bien :o)

C'est sur que c'est le compilateur a qui il faut faire confiance :-)

Posted
Je n'utilises jamais de structures récursives en général. Mais si c'est censé etre un pointeur sur une structure de type struct point, je pense que ce serait plutôt :  


typedef struct point 

{ 

  char el; 

  struct point *fg; 

  struct point *fd; 

} noeud;

ou


typedef struct point 

{ 

  char el; 

  noeud *fg; 

  noeud *fd; 

} noeud;

Mais pas sûr du tout.

Le premier code fonctionne sous gcc (sous win et sous solaris). Le deuxième pas...

Et VC++ :francais:

La deuxième solution ne devrait pas marcher car struct point n'est pas noeud au moment de noeud *fg

Posted

De toute façon si ça marche sous gcc, pas de pb. Y a ka utiliser ça.

Gcc powwwaaaaa.

Mais gcc compile ce qui est ansi et ce qui ne l'est pas également (comme les commentaires // qui ne sont pas ansi pour c ou les long long...)

Ca ne veut donc pas dire que WC( :francais: ) n'est pas ansi.

Posted

Ecris le comme ça, ainsi tu devrais pas avoir de problème peu importe le compilateur


struct point

 {

  char el; 

  point *fg; 

  point *fd; 

 };



typedef struct point noeud;

ta première version compile sous borland, je sais pas trop quoi penser

Posted

En fait ce que je pige pas dans ton code c'est que pour déclarer tes pointeurs de structures 'point', tu tapes

struct point *fg;

et non

point *fg;

Posted
En fait ce que je pige pas dans ton code c'est que pour déclarer tes pointeurs de structures 'point', tu tapes

struct point *fg;

et non

point *fg;

Alors là, j'ai une explication :

- on me l'a enseigné comme ça

- sous GCC/Solaris, c'est comme ça que ça se passe...

(Mais, c'est un vieux GCC, donc ptetre que maintenant, on fait plus comme ça... :merci: . comme quand je fais un malloc, je suis obliger de dire (int *)malloc(int) gnagnagna, alors qu'il me semble que maintenant, c'est juste malloc(int)

EDIT sizeof(int) bien sûr

Posted
En fait ce que je pige pas dans ton code c'est que pour déclarer tes pointeurs de structures 'point', tu tapes

struct point *fg;

et non

point *fg;

Alors là, j'ai une explication :

- on me l'a enseigné comme ça

- sous GCC/Solaris, c'est comme ça que ça se passe...

(Mais, c'est un vieux GCC, donc ptetre que maintenant, on fait plus comme ça... :D . comme quand je fais un malloc, je suis obliger de dire (int *)malloc(int) gnagnagna, alors qu'il me semble que maintenant, c'est juste malloc(int)

EDIT sizeof(int) bien sûr

malloc(sizeof(int)) fontionne sous gcc en effet pourvu que t'ai une variable de type pointeur sur intger pour le récupérer, mais rien ne t'empèche de mettre (int *) devant. Son temps d'exéction est très négligeable devant celui de malloc et c'est plus propre et c'est plus sûr et c'est utilisé régulièrement dans certains cas (cast et ou gtk etc..).

Posted
En fait ce que je pige pas dans ton code c'est que pour déclarer tes pointeurs de structures 'point', tu tapes

struct point *fg;

et non

point *fg;

Ca c'est comme ça qu'il faut faire en C, meme si le C++ permet d'omettre le 'struct"

Posted
kjus> ok je savais pas non plus.

merci en tout cas de l'info

mais y'avait déjà les struct en c ?

Bien sûr que oui. Tout est dans le C. Seul la façon d'écrire le source est légèrement modifiée en C++, mais pas la base.

Posted
kjus> ok je savais pas non plus.

merci en tout cas de l'info

mais y'avait déjà les struct en c ?

Bien sûr que oui. Tout est dans le C. Seul la façon d'écrire le source est légèrement modifiée en C++, mais pas la base.

:craint:

En tous cas ya pas de classes en C. Ca c'est sur. Du moins ya pas de notions d'objets, donc héritage et compagnie...

  • 2 weeks later...
Posted
kjus> ok je savais pas non plus.

merci en tout cas de l'info

mais y'avait déjà les struct en c ?

Bien sûr que oui. Tout est dans le C. Seul la façon d'écrire le source est légèrement modifiée en C++, mais pas la base.

:francais:

En tous cas ya pas de classes en C. Ca c'est sur. Du moins ya pas de notions d'objets, donc héritage et compagnie...

Evidament, le C est un lagague procédural. Seul le C++ a hérité de la notion d'objet qui permet de faire du graphisme. Mais en C pur il reste GTK.

___________________________

Feu theocrite. Maybe back later.

Posted

Evidament, le C est un lagague procédural. Seul le C++ a hérité de la notion d'objet qui permet de faire du graphisme. Mais en C pur il reste GTK.

___________________________

Feu theocrite. Maybe back later.

Je vois pas le rapport entre les objets et le graphisme. Les objets permettent de faire bien plus que du graphisme! Je pense que t'as pas bien saisi ce qu'est vraiment un objet. Tu penses variment qu'en C il etait impossible de faire du graphisme ? Avec borland et sa vielle lib graphics.h tu peux tres bien dessiner des beaux boutons et meme faire un paint. D'ailleurs il existe meme KPaint entierement code avec cette lib.

Posted
Je vois pas le rapport entre les objets et le graphisme.

Un objet permet de faire du graphisme.

Tu penses variment qu'en C il etait impossible de faire du graphisme ?

:inpactforce: Et gtk J'en parle au dessus !!!!!!

___________________________

Feu theocrite. Maybe back later.

(de moins en moins sur)

Posted

Désolé, je maintiens ce que jai dis sur le fait que tu ne dois pas avoir bien saisi la notion d'objet. Un objet permet de faire du graphisme, mais on peut très bien faire du graphisme sans objets. La programmation orientée objet peut faire bien plus que cela. A mon avis tu confonds la notion d'objet qu'on attribue aux textbox, commandbuttons, listbox ('objets' typiques ActiveX de VB) et autres à la notion définie lorsque lon parle de prog orientée objet, comme pour le C++ ou le Java, language 100% objet. Et c'est bien de celle que l'on parle avec l'arrivée des classes et de cette notion d'objet avec le C++.

Posted

Un point pour Emerica :incline:

CreateDC,CreateCompatibleDC, et tout le tintouin, ne sont pas fait pour les chiens ! :)

On peut -heureusement- coder en C et faire de beaux dessins partout.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...