passage de référence en param de fonctions

passage de référence en param de fonctions - C++ - Programmation

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
 

Citation :

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;
 
 
};


 

Citation :

 
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 "";
 
}
 


 

Citation :

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;
}
 


 

Citation :


     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);  
  }
 }
 

Reply

Marsh Posté le 12-01-2010 à 10:03:21   

Reply

Marsh Posté le 12-01-2010 à 11:38:39    

[:joel f:1]  
* tu gagnerais en clareté à pas reinventer la roue mais utiliser std::vector et std::string.
 
[:joel f:2]  
* 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


Message édité par Joel F le 12-01-2010 à 11:40:17
Reply

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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed