passage de référence en param de fonctions - C++ - Programmation
Marsh Posté le 12-01-2010 à 11:38:39
* tu gagnerais en clareté à pas reinventer la roue mais utiliser std::vector et std::string.
* un array de références, ca n'a pas de sens. Je ne sais pas quel est le prototype de CArray, mais il a l'air bien moisi
Marsh Posté le 12-01-2010 à 13:59:20
je sais très bien... mais le fait est que je viens de récupérer ce code et que j'essaie de le comprendre et de le corriger... L'idée est de toucher à un minimum de choses...
Sinon, une petite idée sur mon soucis? Pourquoi je ne récupère que la première valeur. Merci de votre aide...
Marsh Posté le 12-01-2010 à 10:03:21
Bonjour,
j'ai un code, je ne sais pas trop comment m'y prendre. J'ai une classe CArrayString codée ci-dessous. Mon problème sur le passage en paramètre de fonctions. Je ne récupère pas ce que j'écris dans la fonction. Je ne vois pas comment la réécrire? Merci
class CArrayString
{
public:
CArrayString(int nb_col);
virtual ~CArrayString();
void SetValue(int line, int column, CString value);
CString GetValue(int line, int column);
int GetLines();
int GetCols();
protected:
int ci_nb_cols;
CArray<CString, CString&> * ca_array;
};
CArrayString::CArrayString(int nb_col)
{
ci_nb_cols = nb_col;
ca_array = new CArray<CString, CString&>[ci_nb_cols];
}
CArrayString::~CArrayString()
{
for(int i=0; i<ci_nb_cols; ++i)
ca_array[i].RemoveAll();
/* if ( ca_array )
delete ca_array;*/
}
int CArrayString::GetLines()
{
if ( ca_array )
return ca_array[0].GetSize();
return 0;
}
int CArrayString::GetCols()
{
if ( ca_array )
return ci_nb_cols;
return 0;
}
void CArrayString::SetValue(int line, int column, CString value)
{
if ( ca_array && line >= 0 && column >= 0 && column < ci_nb_cols )
ca_array[column].SetAtGrow(line, value);
}
CString CArrayString::GetValue(int line, int column)
{
if (ca_array && ca_array->GetSize() > column && line >= 0 && column >= 0 && line < ca_array[0].GetSize() && column < ci_nb_cols )
return ca_array[column].GetAt(line);
return "";
}
LoadList(CString psRequest, CArrayString *&psList, CArrayString *&psColumnNameList, CString &psErrmsg)
{
...
psList = NULL;
int nb_lines = (int)ptrMyOleDB->GetRecordCount();
if ( nb_lines <= 0 )
return true;
int nb_cols = (int)ptrMyOleDB->GetFieldCount();
if ( nb_cols <= 0 )
return true;
int col;
CString buffer;
psList = new CArrayString(nb_cols);
for( int i=0; i<nb_lines; ++i )
{
for(col=0; col<nb_cols; ++col)
{
ptrMyOleDB->GetFieldValue(col, buffer);
psList->SetValue(i, col, buffer);
}
}
// Verif
for(int i=0; i<psList->GetLines(); i++)
{
for(int j=0; j<psList->GetCols(); j++)
{
CString temp = psList->GetValue(i, j); // ok, je récupère toutes les valeurs
}
}
return true;
}
CArrayString *List = NULL;
LoadList(psRequest, List, psColumnNameList, psErrmsg);
// Verif
for(int i=0; i<List->GetLines(); i++)
{
for(int j=0; j<List->GetCols(); j++)
{
// Je récupère la première valeur mais pas les suivantes!!!!!
CString temp = List->GetValue(i, j);
}
}