Bonjour a tous, j'essaye de comprendre depuis plus d'une heure, et la vraiment je seche, alors je m'en remets à vos avis d'experts :

Voila j'ai fais une classe toute bete, et je veux avoir 2 variables static. Voici son code que j'ai allégé au max :

SaperaRessourcesInfos.h:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
#ifndef _SAP_RESSOURCES_INFOS_H_
	#define _SAP_RESSOURCES_INFOS_H_
 
class CSaperaRessourcesInfos
{
	static unsigned short s_usSapRessourcecount;	//Nombre total de ressources sapera trouvées.
	static int s_nSapServerCount;	
 
};
 
unsigned short CSaperaRessourcesInfos::s_usSapRessourcecount = 0; //Nombre total de ressources sapera trouvées.
int CSaperaRessourcesInfos::s_nSapServerCount = 0; //Nombre total de serveurs sapera trouvés.
#endif
SaperaRessourcesInfos.ccp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#pragma once
#include "stdafx.h"
#include ".\saperaressourcesinfos.h"
 
#pragma comment (lib, "cvcdriver.lib")
 
CSaperaRessourcesInfos::CSaperaRessourcesInfos(void)
{
	InitProperties();
	if(s_nSapServerCount==0)RetreiveSaperaServers();
}
Si je compile cette classe dans son coin , tout va bien.

Maintenant voici mon probleme : Je fais une petite appli MFC de type CDialog et je veux inclure ma classe CSaperaRessourcesInfos et la quoi qu'il arrive j'ai des erreurs de lien, voici ce qu'il se passe :

J'inclus ma classe dans le header ou meme le fichier source qui sert de point d'entré au programme (là où theApp est instancié). si je ne me trompe pas le #include "SaperaRessourcesInfos" ne devrait du coup etre fait QU'UNE SEULE fois non? et bien non j'obtient l'erreur suivante :
iotest error LNK2005: "private: static int CSaperaRessourcesInfos::s_nSapServerCount" (?s_nSapServerCount@CSaperaRessourcesInfos@@0HA) already defined in GrabDemo.obj
iotest error LNK2005: "private: static unsigned short CSaperaRessourcesInfos::s_usSapRessourcecount" (?s_usSapRessourcecount@CSaperaRessourcesInfos@@0GA) already defined in GrabDemo.obj
Si quelqu'un pouvait m'expliquer le pourquoi du comment???
Autre chose que je ne comprends pas. Regardez le header de ma classe, j'y utilise une astuce (visiblement mal) à savoir :

#ifndef _SAP_RESSOURCES_INFOS_H_
#define _SAP_RESSOURCES_INFOS_H_

//mon ptit bazard
#endif
pour eviter tout probleme d'include, du coup je comprends encore moins pourquoi j'obtiens ces erreurs de lien. Si quelqu'un pouvait m'expliquer ce qui cloche dans tout ca, ca serait super sympa parceque la je m'arrache les cheveux !!!