Problème avec une classe

cs_Freeskieur Messages postés 9 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 4 janvier 2006 - 3 janv. 2006 à 17:26
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 - 4 janv. 2006 à 17:49
Hello,

Je connais assez bien les classes mais là j'ai une spécialité et je capte pas comment il faut faire pour que ca passe.
Ca foire sur la ligne ou il y a property avec le message suivant : [C++ Erreur] CValues.h(21): E2290 ] manquant pour array property

Je précise que c'est un exercice et qu'en principe la classe est juste. Qu'est ce que je dois faire pour que ca tourne ?
Dernière précision, je veux pas qu'on me resolve l'exercice, la donnée est juste là pour bien voir l'ensemble.
Je veux juste savoir pourquoi la compilation de la classe telle qu'écrite ci-dessous ne passe pas.

Merci d'avance pour votre aide.

La donnée de l'exercice :


Il s'agit d'écrire une classe gérant une liste de valeurs associées à une clé alphabétique.En plus de l'accès aux valeurs, le but de cette classe est de pouvoir multiplier toutes lesvaleurs qu'elle contient en une seule opération (opérateurs: *).Nous attendons l'interface publique minimum suivante; les parties protégées et privées sont laissées à votre guise:Il est également nécessaire d'écrire un programme très simple qui utilise chaque méthode de la classe.

La classe :




class CValues {


public:


//! Default constructor


CValues();


//! Destructor


virtual ~CValues();


//! Set or get a value using its associated key


__property double Value[AnsiString key]={read=XXXX;write=XXXX};


//! Multiply all currently stored values by the same factor


void operator*(double factor);


}

5 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
3 janv. 2006 à 17:57
il manque un point virgule à la fin de ta classe

if(!Meilleur("Joky")) return ERREUR;<
0
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
3 janv. 2006 à 18:45
Bonjour,



si mes souvenirs sont bons sur la ligne

__property double Value[AnsiString key]={read=XXXX;write=XXXX};


le XXXX est sensé être un pointeur vers une fonction qui lit la valeur
pour Value (read) et qui écrit la valeur pour Value (write)

hors XXXX n'est pas une fonction membre de ta classe, de plus il semblerais logique que ces fontions soient différentes.



Il faudrait un truc genre :



public:



// ... ici le reste des fonctions membres publiques

__property double Value[AnsiString key]={read=GetValue;write=SetValue};



protected:



void __fastcall SetValue(AnsiString index, double value);

double __fastcall GetValue(AnsiString index);



// ... ici le reste du code de la classe


Cordialement

Fred Cailleau-Lepetit (http://cfred.free.fr)
0
cs_Freeskieur Messages postés 9 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 4 janvier 2006
4 janv. 2006 à 14:03
Merci a vous deux.



Pour le point virgule je l'avais déjà rajouté mais comme j'ai collé la donnée il n'y paraissait pas.



Ca marche toujours pas, par contre si je remplace le type AnsiString par le type char alors ca compile.



Est ce que quelqu'un sait pourquoi ca compile avec char mais pas avec AnsiString ?



Marc
0
cs_Freeskieur Messages postés 9 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 4 janvier 2006
4 janv. 2006 à 17:08
Ca passe maitenant avec ansiString car j'ai rajouté #include <vcl.h>



Ca passe sur la classe

par contre ca plante dans la méthode SetValue avec le message de débordement de pile.



Ma classe :



class CValues

{

public:

//! Default constructor

CValues(){}

//! Destructor

virtual ~CValues() {}

//! Set or get a value using its associated key

__property double Value[AnsiString key] = {read=GetValue, write=SetValue};

//! Multiply all currently stored values by the same factor

void operator*(double factor);



void SetValue(AnsiString key, double value) ;

double GetValue(AnsiString key) ;



private :

protected :



};





Mes methodes :



//******************************************************************************

void CValues::SetValue(AnsiString key, double value)

{

Value[key] = value ;

}



//******************************************************************************

double CValues::GetValue(AnsiString key)

{

return Value[key] ;

}





Mes questions :

1) Pourquoi ca foire et comment faire pour que ca marche ?

2)J'ai utilisé une propriété pour les composants graphiques, mais
jamais dans une simple classe et je comprends pas comment ca marche.

C'est quoi une propriété ?

Ca correspond à quoi ?

Ca fonctionne comment ?



J'ai passé toute l'après midi a essayer de faire tourner cette merde et ca commence à vraimment me taper sur le système.

Merci d'avance à ceux qui m'empécheront de balancer mon pc par la fenêtre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
4 janv. 2006 à 17:49
Bonjour,



c'est normal que ça plante par débordement de pile le code dans les fonctions SetValue et GetValue est complètement faux :

Tu refais, via la "property" Value un appel à SetValue ou GetValue, en clair tu boucles.

Le but de ton exercice est justement l'implémentaion de ces deux
fonctions dans lesquelles tu dois récupérer ou intégrer dans un tableau
de "double" dont l'indexation se fait par un AnsiString.

Cordialement

Fred Cailleau-Lepetit (http://cfred.free.fr)
0
Rejoignez-nous