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 02/12/2009, à 16:16

santino

Gestion cache C++

Hello,

Alors je ne suis pas un grand developer C/C++ et j'ai besoin de compiler une appli pour la traduire en C#.

J'ai une erreur sur cette partie du code sans comprendre vraiment:

void JpmcdsHolidayEmptyCache (void)
{
    THoliday *node;
    THoliday *next;

    if(cache != NULL)
    {
        node = cache;
        next = node->next;
        while (node)
        {
            JpmcdsFreeHoliday(node);
            node = next;
            if(node) next = node->next;
        }
        cache = NULL;
    }
}

J'ai cette erreur : error C2440: '=' : cannot convert from 'void *' to 'THoliday *'   

Sachant que:

 * Holiday cache information
 * */
typedef struct _THoliday
{
    char         *name;   /* Upper case name associated with this entry */
    THolidayList *hl;     /* Holiday list */
    void         *next;
} THoliday;

Merci de votre aide!!

Santino

Hors ligne

#2 Le 02/12/2009, à 18:56

:|o

Re : Gestion cache C++

J'ai une erreur sur cette partie du code sans comprendre vraiment
void JpmcdsHolidayEmptyCache (void)
{
    THoliday *node;
    THoliday *next;

    if(cache != NULL)
    {
        node = cache;
        next = node->next;
        while (node)
        {
            JpmcdsFreeHoliday(node);
            node = next;
            if(node) next = node->next;
        }
        cache = NULL;
    }
}
J'ai cette erreur : error C2440: '=' : cannot convert from 'void *' to 'THoliday *'   

Sachant que:

* Holiday cache information
* */
typedef struct _THoliday
{
    char         *name;   /* Upper case name associated with this entry */
    THolidayList *hl;     /* Holiday list */
    void         *next;
} THoliday;
Merci de votre aide!!


Bonsoir, essaie de vérifier le code en gras, en fait la première next dans "next = node->next" de type pointeur vers une structure THoliday tant disque node->next est un pointeur vers un void ( c la première fois que je vois ça) donc l'affectation n'est pas permise. Je pense aussi que void *next  ça se fait pas, un pointeur vers une varible de type void ne se fait pas, le type void est permis que pour les méthodes à ce que je sais.

Dernière modification par :|o (Le 02/12/2009, à 19:00)


http://magento-web.blogspot.com
Votre idée ne vaut rien, tout est dans l’exécution

Hors ligne

#3 Le 02/12/2009, à 23:40

eiger

Re : Gestion cache C++

Bonsoir,

Tout d'abord, en C et C++, des pointeurs de type "void *" sont parfaitement autorisés.
En C, il existe une conversion implicite de "void *" vers tout autre type de pointeur. Ce n'est pas le cas en C++ qui exige un cast explicite.

Ton compilateur (Visual C++ apparemment, vu le nom de l'erreur) est certes capable de compiler du C et du C++, mais il semble compiler ton code comme du C++, alors qu'il s'agit de C. Tu peux vérifier 2 points :
- t'assurer que les fichiers portent l'extension ".c" et non autre chose
- vérifier dans les propriétés de ton projet que le compilateur travaille en mode "C" et non "C++".

Hors ligne

#4 Le 03/12/2009, à 14:20

santino

Re : Gestion cache C++

Merci de vos réponses.

Je comprends mieux le problème. Au départ ce code est du C (système de pricing open source en finance...si si ca existe) mais on ne développe jamais en C et mon business analyst m'a dit de compiler le C en C++ car visual studio 2005 ne me permettait pas de concevoir un projet C mais C++.

J'ai donc récupéré tous les header et fichier, changé les fichier en .cpp et modifié des options de compilation.

Mais même en commentant une partie du code qui pose problème....j'ai des tonnes de nouvelles erreurs.

Est-il possible de concevoir un projet sous VS en C pour éviter tous ces problèmes? Au final, j'ai juste besoin de faire tourner l'algorithme pour comprendre le fonctionnement et le cheminement afin de le reproduire en C#.

Tks

Santino.

Hors ligne

#5 Le 03/12/2009, à 14:37

Karl_le_rouge

Re : Gestion cache C++

> . Au départ ce code est du C (système de pricing open source en finance...si si ca existe) mais on ne développe jamais en C et mon business analyst m'a dit de compiler le C en C++ car visual studio 2005 ne me permettait pas de concevoir un projet C mais C++.

Dis à ton "business analyst" d'arrêter le crack, VS2005 permet sans problème de gérer des projets en C.
Dans le cas où tu intégrerais du code existant en C dans un projet C++, tu peux sois demander à VS2005 de compiler les fichiers concernés avec le compilateur C (par contre, l'édition de lien sera géré par le compilateur C++), soit corriger le code C pour qu'il soit en conformité avec le sous-ensemble C du C++.

Hors ligne