OVH Cloud OVH Cloud

map objet ou objet* ?

13 réponses
Avatar
Delf
Bonjour.

Je pédale dans la semoule, j'y comprends plus rien.

J'ai une classe CAdvLogger qui contient entre autre le membre suivant:

std::map<int, CColorAssociation> m_ColorAssociationMap;

CColorAssociation est une classe banale.

Dans une des méthodes de CAdvLogger :

CColorAssociation association(level, backhexcolor, forehexcolor);
m_ColorAssociationMap[level] = association;

Et là, G++ gueule sur la 2° ligne (l. 45) :

g++ -c AdvLogger.cpp
/usr/include/c++/3.4/bits/stl_map.h: In member function `_Tp&
std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with
_Key = int, _Tp = LanCtl::Utils::Log::CColorAssociation, _Compare =
std::less<int>, _Alloc = std::allocator<std::pair<const int,
LanCtl::Utils::Log::CColorAssociation> >]':
AdvLogger.cpp:45: instantiated from here
/usr/include/c++/3.4/bits/stl_map.h:339: error: no matching function for
call to `LanCtl::Utils::Log::CColorAssociation::CColorAssociation()'
ColorAssociation.h:13: note: candidates are:
LanCtl::Utils::Log::CColorAssociation::CColorAssociation(const
LanCtl::Utils::Log::CColorAssociation&)
ColorAssociation.h:25: note:
LanCtl::Utils::Log::CColorAssociation::CColorAssociation(int, const
std::string&, const std::string&)
*** Error code 1

Si par contre j'utilise la ligne suivante et que je modifie mon code, ça
fonctionne :

std::map<int, CColorAssociation*> m_ColorAssociationMap;

...

CColorAssociation association(level, backhexcolor, forehexcolor);
m_ColorAssociationMap[level] = &association;

1° question : pourquoi ? je ne comprends pas...

Deuxième problème, en gardant le 'CColorAssociation*', je fais une
recherche sur la map :

std::map<int, CColorAssociation*>::const_iterator citer;
citer = m_ColorAssociationMap.find(level);

if (citer == m_ColorAssociationMap.end())
{
...
}
else
{
std::cout << citer->first << std::endl; // je récupère le 'int'

// Comment je récupère la valeur 'CColorAssociation*' ?

std::cout << citer->second)<< std::endl; // adresse
std::cout << (citer->second)->GetBackHexColor(); // rien...
}

Merci d'avance...

--
Delf
Do not use this email in Cc!
L'alcool tue lentement. On s'en fout. On n'est pas pressé.

3 réponses

1 2
Avatar
Delf
Fabien LE LEZ wrote:

Où as-tu vu "constructeur vide" ?


Abus de langage : Je ne voulais pas dire vide mais sans argument.

--
Delf
Do not use this email in Cc!
Quand je vais aux chiottes, je prends un manuel CISCO.

Avatar
Delf
kanze wrote:

Mais je crois d'abord qu'il faut que tu définisses bien ce que
c'est que ce CColorAssociation. (Et en passant, c'est quoi, ce
CC au début. Color ne s'écrit qu'avec un seul C.)


CC, ClassColorAssociation -> CColorAssociation.
Une convention de nommage que j'utilise.

--
Delf
Do not use this email in Cc!
L'alcool tue lentement. On s'en fout. On n'est pas pressé.

Avatar
kanze
Delf wrote:
kanze wrote:

Mais je crois d'abord qu'il faut que tu définisses bien ce
que c'est que ce CColorAssociation. (Et en passant, c'est
quoi, ce CC au début. Color ne s'écrit qu'avec un seul C.)


CC, ClassColorAssociation -> CColorAssociation.
Une convention de nommage que j'utilise.


Et qui apporte quoi ? Tu as des classes qui ne sont pas des
classes, dont le nom ne commencera pas par C ? Une convention
n'a de l'intérêt que s'il apporte de l'information.

Il faut dire aussi qu'autant que je sache, la convention a été
appropriée par Microsoft, pour des classes MFC. Ce qui veut dire
que c'est une convention qu'il vaut mieux éviter dans le code
utilisateur, pour ne pas courir des risques de conflit. (De
même, on éviter RW, à cause de Rogue Wave, et certains d'autres.
L'idéal serait qu'il y ait un registre de tous ces noms, pour
qu'on sache ceux qu'il faut éviter, mais je n'en connais pas.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2