Bonjour
En faisant dans OnInitialupdate de CAngelView
j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CClasse classe; classe.sonnomclasse="4°1"; classe.sasalleclasse.Add("salle 14"); <-------------- plantage pTheApp->mesclasses.Add(classe); // pTheApp recup avant ds le prog
pourtant "sasalleclasse" est bien un CArray de CString déclaré dans CClasse. Ca me rapelle la meme erreur que la fois dernière
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 c:\Program Files\Microsoft Visual Studio\MyProjects\angel 21 7 14 04 juste apres chgt CArray et 0 bug\angelView.cpp(104) : error C2664: 'CArray<TYPE,ARG_TYPE>::Add' : impossible de convertir le paramètre 1 de 'const char [9]' en 'ATL::CStringT<BaseType,StringTraits> ' with [ TYPE=CString, ARG_TYPE=CString & ] and [ BaseType=char, StringTraits=StrTraitMFC<char> ] Une référence qui ne retourne pas à 'const' ne peut pas être liée à une non-lvalue
j'ai donc essayer d'ajouter mon CArray dans le "void copyfrom"Attention aussi sur les declarations d'objets utilisés avec des conteneurs .
pour inserer dans une CList ou CArray le contructeur de copie ou l'operateur d'affection (de l'objet) suivant les cas est appelé .
il convient donc dans le cas d'un objet classe de prendre l'habitude de founir ces methodes.
et là, gros plantage. Je suppose qu'il doit y avoir un truc particulier à faire quand il s'agit d'un CArray.
Erreur pour le test 1:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 #pragma once class CClasse : public CObject { public: DECLARE_SERIAL( CClasse ) CClasse(){Clear();} //----------------------------- ~CClasse(){} //----------------------------- // constructeur de copie CClasse(const CClasse &rItem) { CopyFrom(rItem); } //----------------------------- // operateur d'affectation const CClasse& operator=(const CClasse& Src) { CopyFrom(Src); return *this; } //----------------------------- // effacer les données. void Clear() { sonnomclasse=""; // manque clear du CArray } //----------------------------- // la methode de serialisation. void Serialize(CArchive& ar) { if(ar.IsStoring()) ar << sonnomclasse << sasalleclasse //test n°1 !!!!!!!!! else ar >> sonnomclasse ; } //----------------------------- // copier les données d'une source. void CopyFrom(const CClasse & Src ) { if(this==&Src) return; //Clear(); // clear eventuel. sonnomclasse = Src.sonnomclasse; sasalleclasse = Src.sasalleclasse; // test n°2 !!!!!!!!!!!!!!!!!!! } //----------------------------- // dump pour test CString GetStrDump() { //return ( sasalleclasse); } // les données. CString sonnomclasse; CArray<CString,CString&> sasalleclasse; }; // la gestion d'un tableau de cette classe . typedef CArray<CClasse,CClasse&> CArrayClasse;
Erreur pour le test 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Classe.h(37) : error C2678: '<<' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'CArchive' (ou il n'existe pas de conversion acceptable)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Classe.h(50) : error C2582: 'operator =' fonction non disponible dans 'CArray<TYPE,ARG_TYPE>'![]()
Quelle(s) modification(s) dois-je faire à ma classe pour qu'elle fonctione et plus tard pour qu'elle serialise.
Si tu connais un tuto du genre de CItem mais qui gère un Carray, je suis aussi preneur.
D'avance un enorme merci.
Partager