unresolved external symbol

unresolved external symbol - C++ - Programmation

Marsh Posté le 08-04-2002 à 15:57:41    

Que signifie cette erreur sous visual C++ ?
 
"unresolved external symbol"
 
D'ou cela vient-il ?
 
Merci.

Reply

Marsh Posté le 08-04-2002 à 15:57:41   

Reply

Marsh Posté le 08-04-2002 à 16:10:52    

ca veut dire que ton code source référence des symboles qui n'existent pas.
Par exemple si je fais :
 
// main.cpp
 
void Fonction();
 
int main()
{
 Fonction();
 return 0;
}
 
Fonction() est déclarée mais pas définie. Donc erreur!
Cette erreur est une erreur de linkage et non pas de compilation, car Fonction() pourrait etre défini dans un autre fichier. Ca arrive le plus souvent quand on se trompe dans les parametres des fonctions ( pour peu que le prototype soit erroné lui aussi ) mais aussi quand on oublie de linker avec la librairie qu'on utilise.
Un autre cas est celui du calvaire application console / application Windows. Si tu crées une application console, la libraire CRT (qui va etre liée a ton programme et qui va executer ton main) va aller référencer et donc avoir besoin de "main". Donc si tu mets WinMain a la place ca ne va pas marcher. L'inverse est aussi vrai : Tu crées en Windows et tu définis main au lieu de WinMain. Il va te faire un unresolved external.
Voila, j'espere que ca t'aura été utile  :hello:

 

[jfdsdjhfuetppo]--Message édité par Ace17--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 08-04-2002 à 16:20:18    

Citation :

Fonction() est déclarée mais pas définie. Donc erreur!  


 
 :jap:  
Tout a fait ! Dans 99% des cas, cette erreur survient quand on utilise une fonction externe sans inclure au projet le fichier .lib correspondant
 
Exemple : si tu veux utiliser les fonctions de Direct Draw, tu dois linker ton projet avec ddraw.lib

Reply

Marsh Posté le 08-04-2002 à 16:22:25    

Moi je dirais plutot
50% des cas : console/win32
50% des cas : mauvaise librairie
 
 :)

Reply

Marsh Posté le 08-04-2002 à 16:24:28    

Si tu veux, on ouvre un topic-sondage et on pose cette question  :lol:

Reply

Marsh Posté le 08-04-2002 à 16:31:38    

Moi perso c'était souvent le cas de la faute de frappe:
 
void fonction();
 
void main() {
fonction();
}
 
void fnoction() {
}
 
Ça compile il me semble, mais ça foire au link.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-04-2002 à 16:33:02    

antp a écrit a écrit :

Moi perso c'était souvent le cas de la faute de frappe:
 
void fonction();
 
void main() {
fonction();
}
 
void fnoction() {
}
 
Ça compile il me semble, mais ça foire au link.  




 
Exact en effet, mais ca m'est jamais arrivé celui la
Par contre ca peut aussi avec le type des parametres :  
 
void fonction(int num);
 
void main()
{
fonction(45);
}
 
void fonction(float num)
{
}

Reply

Marsh Posté le 08-04-2002 à 16:50:58    

De toute façon, comme le dit Ace17, la cause de cette erreur est une fonction déclarée mais non définie. Que ce soit à cause d'une faute de frappe ou d'une lib manquante, le résultat est le même : la fonction déclarée n'est pas présente.
 
Donc, pour remédier à ce problème :
 
- Vérifier qu'à chaque prototype correspond une fonction IDENTIQUE
- Vérifier que pour chaque fonction appelée provenant d'un SDK autre que celui de Win32, la lib correspondante soit bien incluse dans le projet. Les lib sont généralement incluses dans le SDK utilisé.(DirectX, Allegro, SDL, etc...)
- Vérifier qu'il existe bien un Main() pour une application console et un WinMain() pour une application Win32
 
A+ :hello:

 

[jfdsdjhfuetppo]--Message édité par Harkonnen--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 08-04-2002 à 18:16:41    

Harkonnen a écrit a écrit :

 
- Vérifier qu'il existe bien un main() pour une application console  




 
Souci du détail, désolé!  :lol:

Reply

Marsh Posté le 08-04-2002 à 18:41:46    

Tout ca renvoit au probleme de déclaration/définition.
Dans ton cas, tu a déclaré quelque chose sans le définir (fonction, variable, ...)
 
On peut aussi avoir ce probleme avec une variable
Exemple d'une variable externe non définie (en C ...) ou bien d'un membre static d'une classe en C++.

Code :
  1. class CExemple
  2. {
  3. public:
  4.     static int Variable;    // déclaration
  5. }


ben si t'oublie dans le .cpp de mettre :

Code :
  1. int CExemple::Variable;    // définition


t'as une mauvaise surprise ...
 
Je crois aussi que j'ai déjà une erreur du genre en initialisant une variable globale dans un .h
Initialiser lors de la déclaration, le compilo n'a pas aimé !


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-04-2002 à 18:41:46   

Reply

Marsh Posté le 08-04-2002 à 22:08:04    

Ace17 a écrit a écrit :

 
 
Souci du détail, désolé!  :lol:  




 
T'as raison en +  :jap: 1 mois de C#, et déjà de mauvaises habitudes  :lol:  
Au passage, à tout ceux qui s'interrogent sur le C#, voici mon avis : c génial !!!
 
A+  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed