Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/06/2008, à 20:05

rniamo

débutant en C++ (enum) [résolu]

#ifndef LISTEREP_HH
#define LISTEREP_HH

#ifdef __linux__
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> 
#endif

#include <string>
#include <iostream>
#include <fstream>
#include "sqlite3.hh"
#include "utileTemplate.hh"
#include "utile.hh"

extern "C"
{
	#include <dirent.h>
	#include <string.h>
}

using namespace std;

class ListeRep
{
	private:
		static int nbExtensions;
		static string *extensions;
		static string fichierDeConfExtension;

		static bool isdir(string pp);
		static bool isFile(string ff);
		static bool formatOK(string ff);
		static bool fichierTmp(string ff);
		static bool verifExt(string ext);
		static long tailleFichier(string nom);
		
		static int nbExtension(string fichierDeConf);
		
		static int nbCount;
		
		static int callbackCount(void *NotUsed, int argc, char **argv, char **azColName);
		
	public:
		ListeRep();
		~ListeRep();
		
		static string *initExtensions(string fichierDeConf);
		
		static void setNb(int n);
		static int getNb(void);
		
		static void analyseDir(string pdir, SQLITE3* bdd, void (*fonction)());
		static int analyseDir(string pdir, string& nom);
		
		enum sortie
		{
			DIR,
			FILE,
			FIN
		};
};

#endif

J'ai besoin d'un champs enum pour savoir le type de sortie d'une de mes fonction (int analyseDir()) mais apperemment en C++ les enum ne sont pas des int sad.

A priori je peux passer la fonction en :

static sortie analyseDir(string pdir, string& nom);

Mais est-ce qu'un :

analyseDir("/",str)==ListeRep::sortie::FIN

est correcte ?

Dernière modification par rniamo (Le 19/06/2008, à 22:14)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#2 Le 18/06/2008, à 20:14

WW

Re : débutant en C++ (enum) [résolu]

Salut,

Je ne connais pas le C++ donc je te serai pas d'une grande aide. Juste pour dire qu'il me semble qu'ils ont amélioré les enum. C'est passé du enum avec int qui pose des problèmes, car tes champs du enum peuvent être incrémenter entre autre (donc risque de BUG vu qu'on ne peut penser à tous les cas de figure). Au type énuméré qui est vraiment un type, enum sortie te donne le nouveau type "sortie".

Voilà, en espérant être utile big_smile.

Dernière modification par WW (Le 18/06/2008, à 20:15)


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#3 Le 18/06/2008, à 20:17

rniamo

Re : débutant en C++ (enum) [résolu]

En fait le plus gros problème que je rencontre est que depuis que j'ai ajouté l'enum, ça ne compile plus, il me dit qu'il ne trouve plus certaine de mes variables dans des fonctions que je n'ai pas touchée.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#4 Le 18/06/2008, à 20:21

blahnotblahblah

Re : débutant en C++ (enum) [résolu]

y a pas conflit entre le DIR de l'enum et une structure utilisée dans le cpp
l'enum c'est bien du int et si tu laisses comme cela DIR=1,FILE=2, etc.


proverbe ashanti: "Quand la maison brûle, on ne perd pas de temps à pérorer".

Hors ligne

#5 Le 18/06/2008, à 20:24

rniamo

Re : débutant en C++ (enum) [résolu]

c'était ça. Et l'enum reste bien des int. Merci


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#6 Le 18/06/2008, à 20:28

WW

Re : débutant en C++ (enum) [résolu]

Désolé, j'ai du confondre.:rolleyes:

Inutile sur ce coup là.:(


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#7 Le 18/06/2008, à 23:46

rniamo

Re : débutant en C++ (enum) [résolu]

non c'est vrai mais apperemment on peux caster à la déclaration (enfin quelque chose comme ça wink)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#8 Le 19/06/2008, à 00:31

Link31

Re : débutant en C++ (enum) [résolu]

using namespace std;

Vire cette horreur de ton .h, et utilise std::FILE pour les fichiers et std::DIR pour les dossiers. Ça devrait résoudre ton problème et en prévenir d'autres.
Les namespaces servent justement à ça.

Dernière modification par Link31 (Le 19/06/2008, à 00:38)

Hors ligne

#9 Le 19/06/2008, à 15:03

rniamo

Re : débutant en C++ (enum) [résolu]

le std:: c'est lourd mais c'est vrai que le problème venait de là sad

Par contre je n'arrive pas à savoir ce qu'il y a dans / :

int ListeRep::analyseDir(string pdir, string& fich, int *siz)
{
	string srcfile;
	struct dirent *mydir;
	static DIR *rep;
	int res=ListeRep::FIN;
	static string pdirs(pdir);
	
	if ( pdir[pdir.size()-1]=='/' )
		pdir.resize(pdir.size()-1);
		
	if (siz)
		*siz=0;
	fich="";

	if (pdir!="")
	{
		rep=opendir(pdir.c_str());
		pdirs=pdir;
	}

	if (rep!=NULL)
	{
		while( (mydir=readdir(rep)) )
		{
			res=ListeRep::CONTINUE;
			string fichier(mydir->d_name);
			cout << fichier << endl;
			if ( isFile(fichier) )
			{
				srcfile=pdirs + '/' + fichier;
				fich=srcfile;
				int taille=tailleFichier(srcfile);

				#ifdef __linux__
				struct stat st;
				int status;
				status=lstat(srcfile.c_str(),&st);
				if ( !S_ISLNK(st.st_mode))
				{
				#endif
				
				if( !isdir(srcfile) )
				{
					if (fichierTmp(fichier) && formatOK(fichier))
					{
						fich=fichier;
						res=ListeRep::FICHIER;
					}
				}
				else
				{
					if (pdirs!=srcfile)
					{
						fich=fichier;
						res=ListeRep::DOSSIER;
					}
				}
			
				#ifdef __linux__
				}
				#endif	
					
				srcfile.erase();
				fichier.erase();
				
				if (siz)
					*siz=taille;
			}
			
			return res;
		}
		
		closedir(rep);
	}
	rep=NULL;
	
	return res;

}

bug trouvé : smile (au début si je mets "/", je le transforme en "")

Dernière modification par rniamo (Le 19/06/2008, à 22:13)


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne