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
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 class CMyEdit : public CEdit { // Construction public: CMyEdit(); [Cut] protected : typedef std::map<UINT, UINT> TDigitTransformerMap; static TDigitTransformerMap m_DigitTransformer_NumericMode; };
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
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 ?
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'
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
Partager