IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

[Debutant] Erreur LNK2001 sous Visual.Net.


Sujet :

Visual C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par d�faut [Debutant] Erreur LNK2001 sous Visual.Net.
    Bonjour,

    Voila mon probl�me: Je fais une application Win32, un petit programme assez simple avec l'interface basique de Visual.

    Donc dans le premier fichier nomm� cavitation.cpp

    (...)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
    {
     	// TODO: Place code here.
    	MSG msg;
    	HACCEL hAccelTable;
    	// Initialize global strings
    	Maillage A;
    	double Centrage = 0.5;
    	double a1 = 0.;
    	double b1 = 0.;
    	double c1 = 1.;
    	double a2 = 0.;
    	double b2 = 0.;
    	double c2 = 1.;
    	int Nx = 100;
    	int Ny = 100;
    	double Lamont = 1.;
    	double Laval = 1.;
    	double Ltuyere = 1.;	
                 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    	LoadString(hInstance, IDC_CAVITATION, szWindowClass, MAX_LOADSTRING);
    (...)

    Donc ici j'initialise des variables que je veux globales i.e. que j'utilise dans d'autres .cpp de mon programme.

    J'associe a ce .cpp le header suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    #pragma once
     
    extern int Nx,Ny;
    extern double a1,b1,c1;
    extern double a2,b2,c2,Centrage;
    extern double Lamont,Laval,Ltuyere;
    extern Maillage A;
    Avec comme nom cavitation.h

    La commande "extern" est celle que j'ai lue dans quelques forum pour d�clarer les variables globales.

    Bon lors de la compilation j'obtient les messages suivant :

    Cavitation error LNK2001: unresolved external symbol "class Maillage A" (?A@@3VMaillage@@A)
    Et ainsi de suite pour toutes les variables.

    J'ai aussi l'erreur suivante :

    Cavitation error LNK2019: unresolved external symbol "public: __thiscall Maillage::Maillage(void)" (??0Maillage@@QAE@XZ) referenced in function _WinMain@16
    et:

    Cavitation error LNK2019: unresolved external symbol "public: virtual __thiscall Maillage::~Maillage(void)" (??1Maillage@@UAE@XZ) referenced in function _WinMain@16

    J'espere ne pas alourdir en ajoutant ma definition de la classe maillage :

    "Maillage.h"

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #pragma once
     
    class Maillage {
    public:
    	Maillage(void);
    	virtual ~Maillage(void);
    public: 
    		double **PointMaillage;
    		void CreationPoint(int , int);
    		void Dessin();
    		void Zone1(int,int);
    		void InitParam(int, int);
    };
    et "Maillage.cpp"

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #pragma once
    #include "stdafx.h"
     
     
    void Maillage::InitParam(int A,int B)
    	{
    		int i;
    		int X,Y;
    		X = 3*A;
    		Y = 3*B;
    		PointMaillage = new double *[X];
    		for (i=0;i<X;i++)
    		{
    			PointMaillage[i] = new double [Y];
    		}
    	};
    void Maillage::Zone1(int X, int Y)
    	{ 
    		int i,j;
    		for (i=0;i<X;i++)
    		{
    			for (j=0;j<Y;j++)
    			{
    				PointMaillage[i][j]=1;
    			}
    		}
    	};
     
    void Maillage::CreationPoint(int A, int B) 
    	{
     
    	};
     
    void Maillage::Dessin()
    	{
    	};
    Je precise que "stdafx.h" regroupe tout les headers ...

    Je suis debutant alors je vous demanderais un peu de compassion. J'espere ne pas rompre une des lois du forums en postant comme je l'ai fait.

    Merci de votre compr�hension.

    PS: une reponse en langage simple serait appr�ciable.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par d�faut
    Je precise que j'ai fait ce post dans la categorie C/C++ car je ne pense pas que ce soit une erreur due au compilateur visual, mais bien une erreur de langage C++ de ma part.

  3. #3
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Il faut d�finir les variables globales en dehors de toute fonction. Si tu le fais dans ton main, elles auront une port�e limit�e � cette fonction.

    A part �a, un #pragma once dans un .cpp ce n'est pas correct, m�me si �a n'a pas beaucoup de cons�quence

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Pour tes deux derni�res erreurs : tu as d�clar� un constructeur et un destructeur pour ta classe, mais tu ne les as pas d�finis.

  5. #5
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Les variables "globales" sont en fat d�finies dans WinMain, elle ne sont pas visibles de l'ext�rieur, m�me avec un extern qui en fait dit qu'il existe des variables globales de ce nom. Mais c'est tr�s tr�s tr�s tr�s tr�s tr�s sale de fonctionner ainsi.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par d�faut
    Merci pour vos reponses.

    Donc comment faire pour bien declarer les globales? dans un .cpp a part?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par d�faut
    Voila j'ai trouv� la solution :

    Je repete peut-etre des choses qui sont deja sur le forum :

    Mais bon :

    J'ai fait un fichier .h avec :

    extern type variable

    Et un fichier .cpp avec :

    type variable = valeur

    Ensuite dans mon fichier qui regroupe les headers (stdafx.h) j'ai ajout� ce .h . Comme ca des que j'ai besoin des globales elles sont la quand j'inclus "stdafx.h"

    Merci pour tout.

    Juste une confirmation que c'est pas trop risqu� ni problematique en quoi que ce soit serait bien venu ...

  8. #8
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    C'est sale, c'est pas propre comme design, pas trop extensible, il y a des risques de conflit entre les noms des variables dans tes fonctions - surtout avec des noms aussi explicites - mais � part �a, �a va !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par d�faut
    Une solution peut-etre alors?
    J'ai bien ri sur ton message en tout cas

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    17
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par d�faut
    J'ai vu des trucs avec des #if et #endif mais alors ca m'est comp�tement incompr�hensible, et � lire les commentaire d'en dessous, c'�tait pas non plus la joie et la propret� mir...

Discussions similaires

  1. Erreur ODBC sous visual c++
    Par thierryG dans le forum C++
    R�ponses: 1
    Dernier message: 11/07/2008, 16h52
  2. classwizar sous visual .net 2005?
    Par toutounesan dans le forum Visual C++
    R�ponses: 1
    Dernier message: 06/10/2007, 17h19
  3. Comment eteindre un PC en C++ sous Visual.NET ?
    Par PONSOLLE dans le forum MFC
    R�ponses: 2
    Dernier message: 01/09/2005, 22h19
  4. debutant: erreur LNK2001 avec la librairie GSL
    Par drill3 dans le forum MFC
    R�ponses: 6
    Dernier message: 25/04/2005, 13h58
  5. R�ponses: 3
    Dernier message: 17/02/2005, 08h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo