Pour contrôlant les membres struct et programmeurs de force d'utiliser les fonctions de lecture/définition, je veux écrire du code comme ci-dessous motif:Comment définir et utiliser une structure sans définition de structure complète dans l'en-tête?
/* Header file: point.h */
...
/* define a struct without full struct definition. */
struct point;
/* getter/setter functions. */
int point_get_x(const struct point* pt);
void point_set_x(struct point* pt, int x);
...
//--------------------------------------------
/* Source file: point.c */
struct point
{
int x, y;
};
int point_get_x(const struct point* pt) {return pt->x; }
void point_set_x(struct point* pt, int x) {pt->x = x;}
//--------------------------------------------
/* Any source file: eg. main.c */
#include "point.h"
int main()
{
struct point pt;
// Good: cannot access struct members directly.
// He/She should use getter/setter functions.
//pt.x = 0;
point_set_x(&pt, 0);
}
Mais ce code ne compile pas avec MSVC++ 2010.
Quels changements devrais-je faire pour compiler?
Remarque: j'utilise la norme ANSI-C (C89), non C99 ou C++.
Vous avez raison, je l'ai oublié :). Mais une autre erreur apparaît: 'erreur C2079: 'pt' utilise struct 'point' non défini –
Voir la réponse de Doug pour cela:' main' ne sait pas quelle est la taille d'un 'point', donc vous voulez faire un' point * 'il ya une allocation du code de la bibliothèque. – dmckee