Probleme a l'acces a une class

VBFRANCE Messages postés 22 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 25 juin 2008 - 15 mai 2004 à 19:44
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 15 mai 2004 à 19:50
Je suis tout nouveau dans la C++, en fait je decouvre. j'ai un soucis avec les class. En fait, j'ai creer un class pour les strings, jusque la pas de probleme. Mais je n'arrives pas a aceder a l'element de ma string pour en savoir le longueur. Pourtant ma class, et ma fonction marchent. J'ai un message d'erreur: 'strlen' : cannot convert parameter 1 from 'class String' to 'const char *'.
J'aimerais que ma fonction puisse fonctionner qq soit le type de chaine de caractere entrés.
Voici mon code:

#include <string.h>
#include

class String
{

public:

// Constructeur par default
String() : len(0), ptr(new char('\0')) {}

// Constructeur par copie
String &operator = (const char *);

//Permettre la sortie
friend ostream &operator << (ostream &, const String &);

// Destructeur
~String()
{delete [] ptr;}

private:
int len;
char *ptr;
};

//-------------------------------------------------------------------
// Objets de la class
//-------------------------------------------------------------------

// **************************
// * Constructeur par copie *
// **************************
String &String::operator=(const char *chrs)
{
delete [] ptr;
len = strlen(chrs);
ptr = new char[len + 1];
strcpy(ptr, chrs);
return(*this);
}

// ********************************
// * Permettre la sortie par cout *
// ********************************
ostream &operator<<(ostream &stream, const String &s)
{
return(stream << s.ptr);
}

//-------------------------------------------------------------------
// Fin des Objets de la class
//-------------------------------------------------------------------

//-------------------------------------------------------------------
// Fonctions
//-------------------------------------------------------------------
// Retourne la longueur d'une chaine
__declspec(naked) unsigned int String_Len(char* String1)
{
__asm {
mov ecx,[esp+4]
xor eax, eax

debut:
inc eax
inc ecx cmp byte ptr [ecx],0
jnz short debut
ret
}
}
//-------------------------------------------------------------------
// Fin des fonctions
//-------------------------------------------------------------------

//------------------------------------------------------------------
void main()
{
char* temp1="Bonjour";
String temp2;
temp2="Bonjour";

cout << "longueur de la Chaine temp1 par strlen: "<< strlen(temp1) << endl;
cout << "longueur de la Chaine temp1 par fonction: " << String_Len(temp1) << endl <<endl;;

cout << "longueur d'un Chaine temp1 par strlen: "<< strlen("Bonsoir vous tous") << endl;
cout << "longueur d'une Chaine temp1 par fonction: " << String_Len("Bonsoir vous tous") << endl <<endl;;

/* ces deux la ne marchent pas
cout << "longueur de la Chaine temp2 par strlen: "<< strlen(temp2) << endl;
cout << "longueur de la Chaine temp2 par fonction: "<< String_Len(temp2) << endl;
*/
}

Merci d'avance a tous

1 réponse

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 mai 2004 à 19:50
ben le message d'ereeur est expliite, ces fonction attende un const char* en parametre et tu leur file ta string

rajoute dans ta classe string la methode

inline const char *String::c_str()
{
return ptr;
}

et fait strlen(temp2.c_str()) par exemple
0
Rejoignez-nous