Bonjour,

je dois passer un projet de MSVC 6.0 a VS 2005.
Je me suis renseigné par-ci par-là et j'ai identifié les principaux problèmes et je suis en train de les corriger.

Mais le compilateur m'annonce des erreurs auxquelles je ne m'attendais pas et surtout, je suis surpris.

voici le cas pour lequel j'écris sur le forum :

dans le fichier de déclaration

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class CMyEdit : public CEdit
{
// Construction
public:
	CMyEdit();
 
[Cut]
protected :
	typedef std::map<UINT, UINT> TDigitTransformerMap;
	static TDigitTransformerMap m_DigitTransformer_NumericMode;
};
dans le fichier source
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
37
38
39
 
// CMyEdit.cpp : implementation file
//
 
#include "stdafx.h"
#include <Controls\MyEdit.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
//-- Init de la map static
const CMyEdit::TDigitTransformerMap::value_type MapInit[]={
							CMyEdit::TDigitTransformerMap::value_type(38,	UINT('1')), 
							CMyEdit::TDigitTransformerMap::value_type(233,	UINT('2')), 
							CMyEdit::TDigitTransformerMap::value_type(34,	UINT('3')),
							CMyEdit::TDigitTransformerMap::value_type(39,	UINT('4')), 
							CMyEdit::TDigitTransformerMap::value_type(40,	UINT('5')), 
							CMyEdit::TDigitTransformerMap::value_type(45,	UINT('6')), 
							CMyEdit::TDigitTransformerMap::value_type(232,	UINT('7')), 
							CMyEdit::TDigitTransformerMap::value_type(95,	UINT('8')), 
							CMyEdit::TDigitTransformerMap::value_type(231,	UINT('9')), 
							CMyEdit::TDigitTransformerMap::value_type(224,	UINT('0')), 
							CMyEdit::TDigitTransformerMap::value_type(61,	UINT('=')),
							CMyEdit::TDigitTransformerMap::value_type(UINT(','),	UINT('.')),
							CMyEdit::TDigitTransformerMap::value_type(UINT(';'),	UINT('.'))};
 
CMyEdit::TDigitTransformerMap CMyEdit::m_DigitTransformer_NumericMode(
									MapInit, MapInit + sizeof MapInit / sizeof *MapInit);
 
/////////////////////////////////////////////////////////////////////////////
// CMyEdit
 
CMyEdit::CMyEdit()
{
  /// blabla ....
}

sur la 1ere ligne de definition de TDigitTransformerMap, le compilo me dit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
error C2248: 'CMyEdit::TDigitTransformerMap'*: impossible d'accéder à protected typedef déclaré(e) dans la classe 'CMyEdit'
	controls\MyEdit.h(71)*: voir la déclaration de 'CMyEdit::TDigitTransformerMap'
	controls\MyEdit.h(15)*: voir la déclaration de 'CMyEdit'
Effectivement TDigitTransformerMap est protected mais ce code fonctionnait sous VC++ 6.0 et c'est en googlant que j'avais trouvé c'est facon d'initialiser un container const protected. Pourquoi ne puis-je pas acceder au typedef dans le fichier source CMyEdit.cpp ?

Pourquoi cela ne compile-t-il plus avec VS 2005. De memoire, l'exemple que j'avais trouvé etait en gcc ...

J'ai bien pensé initialisé ma map dans une méthode mais ca perdrait le caractère const de ce memebre de classe

Quelqu'un connait-il la solution ? ou peut-il proposer une autre solution ?

Merci

Vincent