Utiliser la fonction C dans un programme C++; “multiplier” erreur
Je suis en train d'utiliser ce code pour le Porter découlant de l'algorithme dans un programme C++ je l'ai déjà écrit. J'ai suivi les instructions à la proximité de la fin du fichier pour l'utilisation du code dans un module séparé. J'ai créé un fichier, la tige.c, qui se termine après la définition et l'a
extern int stem(char * p, int i, int j) ...
Il a bien fonctionné dans Xcode, mais il ne fonctionne pas pour moi sur Unix avec gcc 4.1.1--étrange car d'habitude j'ai aucun problème entre les deux. Je reçois le message d'erreur
ld: fatal: symbole de la tige(char*, int, int)' est de multiplier définie par:
(fichier /var/tmp//ccrWWlnb.o type=FUNC; fichier /var/tmp//cc6rUXka.o type=FUNC);
ld: fatal: Fichier de traitement des erreurs. Pas de sortie écrite de cluster
J'ai regardé en ligne et il semble que il ya beaucoup de choses que je pourrais avoir tort, mais je ne suis pas sûr de ce que la combinaison d'un fichier d'en-tête, extern "C", etc. serait de travailler.
Oui, en une seule fonction .fichier cpp j'ai #include "de la tige.c". Compilation avec g++ Whatever.cpp Anotherthing.cpp de la tige.c -o myprogram.
Et bien c'est votre problème! Par ailleurs, cela n'a rien à voir avec le mélange de C et de C++. La même chose pourrait se produire si vous avez eu
#include
ed .fichier cpp à l'intérieur de l'autre.OriginalL'auteur eom | 2010-05-02
Vous devez vous connecter pour publier un commentaire.
Cette erreur signifie que le symbole (la tige) est défini en plus d'un module.
Vous pouvez déclarer le symbole en autant de modules que vous le souhaitez. Un déclaration d'une fonction ressemble à ceci:
Vous n'avez pas besoin de la "extern" mot-clé, bien qu'il ne fait pas de mal quoi que ce soit. Pour les fonctions de déclarations, il est implicite.
Un définition d'une fonction ressemble à ceci:
Le "multiplier" erreur indique que vous disposez de deux modules avec un définition pour la même fonction. Cela signifie généralement que vous avez deux fichiers qui définissent la fonction, ou les deux fichiers #include d'un fichier qui définit la fonction. Normalement, vous ne devriez pas mettre des définitions de fonctions dans des fichiers #include. Mettre le définition dans un .c, .rpc, ou .cc fichier et il suffit de mettre un déclaration dans un .h fichier #include.
Par exemple, vous pouvez créer une tige.h fichier avec ça:
Puis,
#include "stem.h"
.OriginalL'auteur Daniel Stutzbach
Le fait que Whatever.cpp a #include "de la tige.c" donne la première définition et la spécification de la tige.c sur la ligne de commande du compilateur fournit la deuxième définition.
Vous devez casser la tige.c dans un fichier d'en-tête (Avec juste des prototypes de fonction) et une .c fichier qui contient la mise en œuvre. Inclure uniquement les fichiers d'en-tête Whatever.cpp
OriginalL'auteur Ken Bloom
Vous avez besoin d'ajouter un "C". Vous devez extern "C" { ... } et seulement réellement définir la fonction une fois. Mais vous pouvez le déclarer (le prototype) aussi souvent que vous le souhaitez.
extern "C"
si vous avez besoin d'une fonction C++ pour pouvoir être appelé à partir du code C. Dans ce cas, c'est une autre façon de contourner et d'une fonction C est appelé à partir d'un code C++.OriginalL'auteur Puppy