-1
votes

Déclarez un objet de pointeur de struct / variable comme un externe

J'intention de déclarer sur l'objet comme un externe, mais fini avec plusieurs référence non définis à l'objet struct code>

voici les codes p>

gvars.h p > xxx pré>

main.c p>

#include <structsource.h>
#include <others.h> //houses definition of others_func();
#include "gvars.h"

int otherfunc(){
    others_func(myvars);
}


4 commentaires

Un int n'est pas un pointeur non plus, et l'argument s à principal ne correspond pas à celui que vous avez donné ... etc .. . Vous devriez obtenir beaucoup plus de diagnostics outre le référence non défini


@Anttihaapala j'ai déjà corrigé l'argument principal, à la manière, le myvalue 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) n'est pas une déclaration appropriée de principal . Pour les programmes portables, il devrait être int Main (VOID) ou INT Main (int Argc, char * argv []) .


3 Réponses :


2
votes
struct newType *myvars;

int main(int myvalue){
   myvars = ...; // myvalue is an int, to do myvars = myvalue has no sense
  return 0;
}

5 commentaires

Bonjour, Bruno, comment suggérez-vous est le meilleur moyen d'affecter la valeur pour myvars afin que je ne recevrais pas de référence non définie dans autres.c


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 global, voir la nouvelle version de ma réponse


@bruno, salut, j'ai corrigé la partie principale. Il compile maintenant. Merci!



2
votes

la déclaration extern struch nouveautype * myvars; déclare myvars pour être un identifiant avec une liaison externe.

Quand struct newttype * myvars = myvalue; apparaît à l'intérieur Fonction, il déclare myvars 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 est également une définition car elle provoque la création d'un objet.)

Nulle part dans votre programme est une définition de myvars qui a une liaison externe, la première déclaration n'est jamais liée à une définition.

Pour créer une définition de myvars avec un lien externe, vous devez mettre structure nouveautype * myvars = myvalue; extérieur d'une fonction. < / p>


0 commentaires

1
votes

Vous avez besoin de votre pointeur global.

struct newType *myvars;

int main(){
    myvars = myvalue;
    /* .... */
}


0 commentaires