Définition de plusieurs de linker erreur ...
J'ai défini un fichier spécial: config.h
Mon projet a également des fichiers:
t.c, t.h
pp.c, pp.h
b.c b.h
l.cpp
et #comprend:
dans t.c:
#include "t.h"
#include "b.h"
#include "pp.h"
#include "config.h"
dans b.c:
#include "b.h"
#include "pp.h"
en pp.c:
#include "pp.h"
#include "config.h"
dans l.cpp:
#include "pp.h"
#include "t.h"
#include "config.h"
il n'existe pas de directives include dans mon *.h
fichiers, seulement dans *.c
fichiers. J'ai défini cette config.h:
const char *names[i] =
{
"brian", "stefan", "steve"
};
et ont besoin de ce tableau dans l.cpp t.c, pp.c mais Im obtenir cette erreur:
pp.o:(.data+0x0): multiple definition of `names'
l.o:(.data+0x0): first defined here
t.o:(.data+0x0): multiple definition of `names'
l.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [link] Error 1
J'ai inclure des gardes dans chaque *.h
fichier que j'utilise dans mon projet. Tout aider à résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Ne pas définir des variables dans les en-têtes. Mettre déclarations dans l'en-tête et les définitions dans un de la .c fichiers.
Dans la configuration.h
Dans certains .fichier c:
Si vous mettez une définition d'une variable globale dans un fichier d'en-tête, puis cette définition va y aller tous .c fichier qui contient cet en-tête, et vous obtiendrez de multiples définition de l'erreur, car une varible peut être déclaré plusieurs fois, mais peut être défini qu'une seule fois.
h*.
fichiers?extern
pour le constructeur de la classe?extern
est en fait redondante:extern
de liaison est la valeur par défaut.Déclarations de fonctions publiques aller dans les fichiers d'en-tête, oui, mais les définitions sont absolument valable dans les en-têtes ainsi! Vous pouvez déclarer la définition statique (seulement 1 copie autorisée pour l'ensemble du programme) si vous définissez les choses dans un en-tête pour les fonctions de l'utilitaire que vous ne voulez pas avoir à définir de nouveau dans chaque c fichier. I. E. la définition d'une énumération et une fonction statique de traduire l'énumération en une chaîne de caractères. Ensuite, vous n'aurez pas à réécrire l'enum de la chaîne de traducteur pour chaque .c fichier qui contient l'en-tête. 🙂