OVH Cloud OVH Cloud

Tableau suite

1 réponse
Avatar
Olivier Sarda
voila maintenat ja passe mon tablean en reference

avec la fonction suivante :

void TManipExcel::UpdateTab(TConventionsPratic& TabPratic, Variant* value,
int* Ligne, int* Column)

dans la fonction qui apelle je fais

void TManipExcel::ReadDatasXLS(TConventionsPratic& TabPratic)
{
//code
TConventionsPratic *pTab=new TConventionsPratic[nbLignes];

for(int Ligne=1;Ligne<=nbLignes;Ligne++){


for(int Col=1;Col<=nbColumns;Col++){

vCell=vWorksheet.OlePropertyGet("Cells",Ligne,Col);
vValue=vCell.OlePropertyGet("Value");
UpdateTab(*pTab,&vValue,&Ligne,&Col);
}
}

// code
}
et que je fais l'instruction suivante
void TManipExcel::UpdateTab(TConventionsPratic& TabPratic, Variant* value,
int* Ligne, int* Column)
{
TabPratic[Ligne].CODE_COMMUNE=*vValue;
}

bcb me dit [C++ Erreur] TManipExcel.cpp(255): E2094 'operator+' non
implémenté dans le type 'TConventionsPratic' pour les arguments de type 'int
*'
et la je suis perdu que faire ?

1 réponse

Avatar
Benoit Rousseau
Olivier Sarda wrote:
voila maintenat ja passe mon tablean en reference

avec la fonction suivante :

void TManipExcel::UpdateTab(TConventionsPratic& TabPratic, Variant* value,
int* Ligne, int* Column)


Pourquoi int* pour Ligne et Column à la place de int ? Tu vas modifier
les valeurs de Lignes et Column ?
C'est pas trop recommandé si tu fais ton appel dans une boucle (comme
c'est le cas plus bas)


dans la fonction qui apelle je fais

void TManipExcel::ReadDatasXLS(TConventionsPratic& TabPratic)
{
//code
TConventionsPratic *pTab=new TConventionsPratic[nbLignes];

for(int Ligne=1;Ligne<=nbLignes;Ligne++){
Je ne sais pas si les lignes commencent à 1 ou à 0, mais pour ne pas

s'emeller les pinceaux avec les vrais tableaux, je pense qu'ils ont
adopté la même convention que partout ailleur en C++ (Je me trompe? Ce
serait bête que ce ne soit pas le cas)
Alors vérifie bien que ligne et col sont dans [1..nbLignes] ou
[0..nbLignes-1].
for(int Col=1;Col<=nbColumns;Col++){
vCell=vWorksheet.OlePropertyGet("Cells",Ligne,Col);
Qu'est ce que vCell ? J'aurais plutôt tendance à le déclarer à

l'intérieur la boucle (Convention qu'adoptent la majorité des codeurs
c++)...
vValue=vCell.OlePropertyGet("Value");
UpdateTab(*pTab,&vValue,&Ligne,&Col);
}
}

// code
}
Est ce que tu effaces pTab (delete) ? Ou bien est ce que quelqu'un s'en

charge pour toi ?

et que je fais l'instruction suivante
void TManipExcel::UpdateTab(TConventionsPratic& TabPratic, Variant* value,
int* Ligne, int* Column)
{
TabPratic[Ligne].CODE_COMMUNE=*vValue;
}
Il y a encore quelquechose d'étrange : pTab est un pointeur...

Pourquoi faire passer la valeur pointée par pTab pointé (*pTab) par
référence ?
Tu pourrais y aller directement : TConventionsPratic* TabPratic
Je ne suis pas sûr que tu es le droit de faire TabPratic[Ligne]... A
moins que l'opérateur[] soit déclaré dans TConventionsPratic...

bcb me dit [C++ Erreur] TManipExcel.cpp(255): E2094 'operator+' non
implémenté dans le type 'TConventionsPratic' pour les arguments de type 'int
*'
On ne voit pas où apparait cet operateur

et la je suis perdu que faire ?



Pour résumer, je ferais plutôt

void TManipExcel::UpdateTab(TConventionsPratic* TabPratic,
Variant& value,
int Ligne, int Column);

void TManipExcel::ReadDatasXLS(TConventionsPratic& TabPratic)
{
//code
TConventionsPratic *pTab=new TConventionsPratic[nbLignes];

for(int Ligne= 0 ;Ligne < nbLignes;Ligne++){
//Pas sûr des bornes, a verifier...
for(int Col=0;Col<nbColumns;Col++){ //Idem
vCell=vWorksheet.OlePropertyGet("Cells",Ligne,Col);
vValue=vCell.OlePropertyGet("Value");
UpdateTab(pTab, vValue, Ligne, Col);
}
}

delete [] pTab; // ?
// code
}


void TManipExcel::UpdateTab(TConventionsPratic* TabPratic,
Variant& value,
int Ligne, int Column)
{
TabPratic[Ligne].CODE_COMMUNE=*vValue;
}

--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/