IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

cannot convert `Logger::logEntry*' to `logEntry*' in assignment


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 16
    Points
    16
    Par défaut cannot convert `Logger::logEntry*' to `logEntry*' in assignment
    Salut, je m'araches les cheveux depuis 1 heures. Je fais appel a votre experience avant de lacher cette solution et de passer à une implementation 100% objet.

    Voila, j'implemente une classe dont le fonctionnement repose sur une combinaison de struct et de pointeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #ifndef LOGGER_H_
    #define LOGGER_H_
     
    #include <string>
    #include <GL/glfw.h>
     
     
    class Logger {
     
    public:
    	static const int DEBUG;
    	static const int NORMAL;
    	static const int IMPORTANT;
     
    	static Logger * getSingleton ();
    	~Logger();
     
    	int log (std::string);
    	int log (int, std::string);
    	int log (int, std::string, std::string);
     
    	int setDirectory (std::string);
    	int setFilenameText (std::string);
    	int setPrefixBMP (std::string);
     
    private:
    	Logger();
     
    	static Logger * ptr;
    	GLFWmutex loggerMutex;
     
    	std::string directory;
    	std::string filenameText;
    	std::string prefixBMP;
     
    	static const int nbEntrees;
    	std::string lvlchar[3];
     
     
        // les structures en questions
     
    	struct logData {
    		int size;
    		struct logEntry * entree[1000];
    	};
     
    	struct logEntry {
    		//int type;
    		int lvl;
    		double date;
    		std::string caller;
    		std::string message;
    	};
     
     
    	struct logData * dataLogged, * dataWritten;
     
     
    };
     
    #endif /* LOGGER_H_ */
    et la fonction log qui me rend fou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    int Logger::log (int lvl, std::string caller, std::string msg) {
    	struct logEntry * entree;
     
    	glfwLockMutex (ptr->loggerMutex);
    	if (dataLogged->size < nbEntrees) {
    		entree = new struct logEntry;
    		entree->lvl = lvl;
    		entree->date = glfwGetTime ();
    		entree->message = msg;
     
    		dataLogged->entree[dataLogged->size] = entree; // C'est ici que ca coince
    		glfwUnlockMutex (ptr->loggerMutex);
    	}
    	else {
    		glfwUnlockMutex (ptr->loggerMutex);
    		return -1;
    	}
    }
    et voila l'erreur de compilation

    logger.cpp: In member function `int Logger::log(int, std::string, std::string)':
    logger.cpp:72: error: cannot convert `Logger::logEntry*' to `logEntry*' in assignment
    mingw32-make.exe: *** [all] Error 1

    Je comprend pas les types que mon compilateur me sort, pourquoi il refuse de me les caster et comment sortir de ce probleme.

    Merci d'avoir preté attention a mon cas.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Je pense qu'il n'aime pas la répétition de struct dans tes déclarations. Ah, les restes de C....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    class Logger {
     
    public:
    	static const int DEBUG;
    	static const int NORMAL;
    	static const int IMPORTANT;
     
    	static Logger * getSingleton ();
    	~Logger();
     
    	int log (std::string);
    	int log (int, std::string);
    	int log (int, std::string, std::string);
     
    	int setDirectory (std::string);
    	int setFilenameText (std::string);
    	int setPrefixBMP (std::string);
     
    private:
    	Logger();
     
    	static Logger * ptr;
    	GLFWmutex loggerMutex;
     
    	std::string directory;
    	std::string filenameText;
    	std::string prefixBMP;
     
    	static const int nbEntrees;
    	std::string lvlchar[3];
     
     
        // les structures en questions
     
       struct logEntry;
    	struct logData {
    		int size;
    		logEntry * entree[1000];
    	};
     
    	struct logEntry {
    		//int type;
    		int lvl;
    		double date;
    		std::string caller;
    		std::string message;
    	};
     
     
    	logData * dataLogged, * dataWritten;
     
     
    };
     
    int Logger::log (int lvl, std::string caller, std::string msg) {
    	struct logEntry * entree;
     
    //	glfwLockMutex (ptr->loggerMutex);
    	if (dataLogged->size < nbEntrees) {
    		entree = new logEntry;
    		entree->lvl = lvl;
    		entree->date = 1;//glfwGetTime ();
    		entree->message = msg;
     
    		dataLogged->entree[dataLogged->size] = entree; // C'est ici que ca coince
    		glfwUnlockMutex (ptr->loggerMutex);
    	}
    	else {
    		glfwUnlockMutex (ptr->loggerMutex);
    		return -1;
    	}
    }
    Sinon, effectivement, pourquoi ne pas utiliser des conteneurs au lieu de tous ces (horribles) pointeurs et tableaux.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Ah ah ! Mon sauveur. lol

    Une fois la solution connue, ca parait toujours debile, que ce soit en C ou c++. C'est vrai que mon compilateur C ne m'aurait pas repondu de la meme maniere. Je suis nouveau en c++, mais j'ai l'impression que le compilateur (mingw) a beaucoup plus de mal a me sortir un diagnostic precis.

    Sinon, c'est vrai que je connais pas trop les objets "standard" du c++. La faute aux sources d'apprentissage qui se concentrent toujours sur les bases du c++ sans jamais en explorer l'etendue, ou la faute a ma faineantise Si t'as une doc sympa sur ces classes, je si preneur.

    Sinon, t'utiliserai quel type d'e conteneurs ?

    Merci encore.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Pour le singleton, tu peux regarder le tuto de David sur les Design pattern en C++.
    Pour choisir un conteneur, tu as l'entrée de la F.A.Q.. J'ai l'impression qu'entre un std::list et un std::vector tu dois arriver à trouver ton bonheur.
    Si tu veux vraiment utiliser des pointeurs, regarde du côté de ce tuto : Présentation des pointeurs intelligents en C++
    Pour la STL : La bibliothèque C++ STL, Les algorithmes de la STL.
    Et d'une façon générale, tu peux aller sur la pages cours C++.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Alors là !
    Tu fais dans l'efficacité toi lol.

    Je vais prendre mon temps pour regarder tout ca.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/03/2013, 18h37
  2. Réponses: 2
    Dernier message: 28/06/2011, 14h09
  3. Réponses: 5
    Dernier message: 21/12/2010, 21h47
  4. cannot convert 'std::string' to 'System::String ^'
    Par broadhead dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo