Visual C++ symbole externe non résolu (ne peut pas trouver un de mes propres fonctions)
C'est un très problème de base qui est frustrant de moi en ce moment. Disons que, dans une solution unique, j'ai deux projets. Appelons le premier projet SimpleMath. Il dispose d'un fichier d'en-tête "Ajouter.h" qui a
int add(int i, int j)
et la mise en œuvre "Add.cpp" qui a
int add(int i, int j) {
return i+j;
}
Maintenant, disons dans un deuxième projet que je veux utiliser la fonction ajouter. Toutefois, ce code:
#include "..\SimpleMath\Ajouter.h"
int main() {
add(1, 2);
}
résultats dans "symbole externe non résolu". Comment puis-je obtenir le deuxième programme de "savoir" à propos de la mise en œuvre effective dans le .fichier cpp. Comme une note de côté, tout le code est une fiction, ce n'est pas comment je programme.
OriginalL'auteur Obediah Stane | 2008-10-09
Vous devez vous connecter pour publier un commentaire.
La raison de l'erreur que vous obtenez est que, en incluant le fichier d'en-tête que vous avez dit au compilateur qu'il est un symbole
Qui seront présents lors de l'assemblage, mais vous n'avez pas compris que le symbole (le code de la fonction) dans votre projet. Un moyen rapide de résoudre le problème est de simplement ajouter Add.cpp pour les deux projets. Mais le "gentil" la solution serait probablement de faire SimpleMath dans une bibliothèque au lieu d'une application en changeant le type de projet dans les propriétés du projet.
Et par la manière, vous voulez probablement une sorte de mécanisme en place pour éviter que plusieurs inclusion du fichier d'en-tête en place. J'ai l'habitude d'utiliser
#pragma once
ce qui devrait être suffisant si vous restez avec Visual C++, mais qui pourrait ne pas être entièrement portable donc, si vous voulez la portabilité, aller avec l'approche plus traditionnelle de l'emballage le fichier d'en-tête dans un#ifndef
-bloc, en tant que tel:Bonne chance.
De nouveaux peut-être, mais les anciens ne comprends toujours pas. Il n'est donc pas portable.
OriginalL'auteur korona
Si vous êtes en essayant de lier les bibliothèques C dans les projets C++, vous aurez besoin de faire quelque chose comme
comme le C et le C++ utilise différents noms de symbole.
OriginalL'auteur
Vous avez à faire Add.cpp partie d'une bibliothèque et de les inclure dans les deux projets. ou vous devez ajouter Add.cpp pour votre deuxième projet de trop.
Edit: pour faire SimpleMath une bibliothèque dans le projet de paramètres Généraux et de modifier la Configuration de Type Statique Lib.
Ensuite, allez dans vos paramètres de solutions, cliquez sur les Dépendances d'un Projet, puis sélectionnez votre deuxième projet dans la liste déroulante, puis mettez une coche à côté de SimpleMath. Qui va automatiquement lien SimpleMath à votre deuxième projet, et aussi assurez-vous que toutes les modifications à SimpleMath sera reconstruit lorsque vous reconstruisez votre deuxième projet.
OriginalL'auteur Gerald
SimpleMath aurait besoin d'être défini comme un fichier de bibliothèque (.LIB) dans les propriétés du projet, je suis en supposant que c'est un non géré (non-.Net) C++. Ensuite inclure SimpleMath.lib de l'autre projet.
#include "MyLibrary.lib
?OriginalL'auteur James Curran
Ont un coup d'oeil à ce lien, il devrait vous aider:
http://msdn.microsoft.com/en-us/library/0603949d.aspx
OriginalL'auteur Mark Ingram
Je viens d'avoir ce problème dans le même projet... Après avoir examiné de près mon code, je remarque que le code tente d'appeler la fonction a été à l'aide d'une interface (grâce à une méthode virtuelle pure appel = 0). Cependant, j'ai oublié d'ajouter le "virtuel" mot dans l'interface de la classe et de la classe d'implémentation. Une fois, j'ai ajouté le "virtuel" le problème a été résolu.
OriginalL'auteur sprite
Juste qu'il avait dans le même projet aswell, s'avère, j'ai eu deux filtres et nommé deux .rpc-fichiers le même nom. Pour Visual Studio juste a remplacé un .obj lors de la compilation de l'autre. Résultant dans les fonctions manquantes dans la première .obj. Leçon: ne jamais le nom .rpc-les fichiers de la même, même dans les différents dossiers/filtres.
OriginalL'auteur lama12345