J'intention de déclarer sur l'objet comme un externe, mais fini avec plusieurs voici les codes p> gvars.h p > main.c p> référence non définis à l'objet struct code>
#include <structsource.h>
#include <others.h> //houses definition of others_func();
#include "gvars.h"
int otherfunc(){
others_func(myvars);
}
3 Réponses :
struct newType *myvars; int main(int myvalue){ myvars = ...; // myvalue is an int, to do myvars = myvalue has no sense return 0; }
Bonjour, Bruno, comment suggérez-vous est le meilleur moyen d'affecter la valeur pour myvars code> afin que je ne recevrais pas de référence non définie dans
autres.c code>
Vous n'avez toujours pas dit comment le réparer.
@Anttihaapala ok j'ai édité le code pour ajouter une solution possible
@Dominicguana La manière plus simple est de faire myvars i> global, voir la nouvelle version de ma réponse
@bruno, salut, j'ai corrigé la partie principale. Il compile maintenant. Merci!
la déclaration Quand Nulle part dans votre programme est une définition de Pour créer une définition de extern struch nouveautype * myvars; code> déclare
myvars code> pour être un identifiant avec une liaison externe. P>
struct newttype * myvars = myvalue; code> apparaît à l'intérieur strong> Fonction, il déclare
myvars code> pour être un identifiant sans liaison. Parce qu'il n'a pas de liaison, il ne sera pas lié à la déclaration antérieure. (Cette déclaration de
myvars code> est également une définition car elle provoque la création d'un objet.) P>
myvars code> qui a une liaison externe, la première déclaration n'est jamais liée à une définition. P>
myvars code> avec un lien externe, vous devez mettre
structure nouveautype * myvars = myvalue; code> extérieur fort> d'une fonction. < / p>
Vous avez besoin de votre pointeur global.
struct newType *myvars; int main(){ myvars = myvalue; /* .... */ }
Un
int code> n'est pas un pointeur non plus, et l'argument s b> à
principal code> ne correspond pas à celui que vous avez donné ... etc .. . Vous devriez obtenir beaucoup plus de diagnostics outre le
référence non défini code>
@Anttihaapala j'ai déjà corrigé l'argument principal, à la manière, le
myvalue code> est une valeur valide pour le type de données de nouveauType.
@SomeProGrammerDude: Ce n'est pas un commentaire utile, et il est présenté d'une manière que les gens considèrent hors de mise à jour ou de grossier. Il n'est pas utile car l'apprentissage sur la portée est insuffisant pour répondre au problème - vraiment comprendre comment fournir une définition externe nécessite la compréhension de la liaison et les règles sur ce qui rend les déclarations externes et ce qui rend une définition plutôt qu'une déclaration plutôt qu'une déclaration. Ces règles ne sont pas simples, non présentées dans la norme C de manière directe et ne sont pas résolues uniquement en apprenant la portée.
Int Main (INT X) CODE> n'est pas une déclaration appropriée de
principal code>. Pour les programmes portables, il devrait être
int Main (VOID) CODE> ou
INT Main (int Argc, char * argv []) code>.