2011-06-19 5 views
0

Je suis novice en programmation C++ et j'essaie de créer un programme qui simule le jeu de la vie de Conway. J'ai presque fini mais quand j'ai fait que chaque fonction ait son propre fichier, je continue d'obtenir cette erreur d'éditeur de liens.Erreur de lien C++ LNK2005

1>algorithm_change.obj : error LNK2005: "unsigned short height" ([email protected]@3GA) already defined in algorithm.obj 

Mon code est à https://github.com/rupertsteel/Life/tree/master/Life

+0

@Tim: 'Définir', pas 'déclarer'. –

+0

Définissez-vous les variables dans chaque fichier? c'est votre problème le plus probable – Tim

Répondre

3

Sans regarder le code, avez-vous un unsigned short height; global dans un fichier d'en-tête? Si oui, remplacez cela par extern unsigned short height; et placez un unsigned short height; dans un fichier source incluant l'en-tête spécifique.

+2

Les en-têtes ont à peu près tout ce qui est déclaré comme extern (en supposant que le code n'a pas été corrigé avant la publication de la question). D'après son apparence, cependant, je ne vois pas où l'une des vars globales (hormis 'array_length') a été déclarée non-extensible du tout. – cHao

+0

Merci, j'ai vu une autre question mais elle n'a pas précisé la réponse. –

1

Quelques commentaires:

1) array_length en life.h doit être externed

2) Toutes les variables externed (largeur, hauteur, les tiques, les count_array, change_array, error_check, algorithm_length, array_length) besoin d'être défini quelque part.

Dans votre code, vous avez essentiellement dit au compilateur que ces variables existent quelque part mais ne les ont pas réellement placées n'importe où. Dans l'un de vos fichiers .cpp dans la portée globale vous devez mettre:

unsigned short int width; 
unsigned short int height; 
unsigned long int ticks; 
unsigned short int count_array[10923][10923]; 
bool change_array[10923][10923]; 
int error_check; 
unsigned long int algorithm_length; 
unsigned long int array_length; 

Quelle est exactement la même chose que ce que vous avez à life.h, sauf sans le mot-clé extern. Cela créera réellement les variables, par opposition à maintenant où elles n'ont aucune implémentation concrète.

Si vous apportez les modifications, je suggère que votre code soit compilé (testé avec gcc). Cela étant dit, l'erreur réelle que vous voyez n'a pas de sens.

Questions connexes