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 :

Passage d'un code C++ Linux vers Windows


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre exp�riment�
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par d�faut Passage d'un code C++ Linux vers Windows
    Bonjour � tous

    Voici mon probl�me. Il y a quelques temps, j'avais �crit une librairie C++ sous Linux qui compilait sans erreurs ni warnings avec g++.
    Il m'a �t� demand� de recompiler ce code sous Windows x86 avec Visual C++ Express 2005. Autant, j'ai de l'exp�rience avec g++, autant je vous avoue que coder sous Visual C++ tient pour moi de l'aventure.
    Donc, j'importe mon projet sous Visual C++ et je lance la compilation. Gasp ! Que d'erreurs et warnings !!!
    Par exemple, consid�rons la fonction suivante (qui plus est c'est une librairie faisant appel � JNI pour Java) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    JNIEXPORT void JNICALL Java_com_bioxpr_linkers_BeaconPCR_getLine(JNIEnv *env, jobject object, jint a, jobjectArray string){
        //Ceci avait été écrit avant et fonctionnait sous Linux
    //const char *args[a];
    //Modification pour Win mais sans doute fausse
        const char *args[] = new char[a];
        for (int i=0; i<a; i++){
            jstring jstr = (jstring)env->GetObjectArrayElement(string, i);
            args[i] = env->GetStringUTFChars(jstr, 0);
        }
        FindBeacon(a, args);
    }
    Dans cette m�thode, je me choppe les erreurs suivantes :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    error C2440: 'initializing' : cannot convert from 'char *' to 'const char *[]'
    There are no conversions to array types, although there are conversions to references or pointers to arrays
    Quelqu'un peut-il m'aider � trouver la voie ?
    Merci d'avance de votre aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne r�pond � aucune question technique par MP.

  2. #2
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par GLDavid
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    JNIEXPORT void JNICALL Java_com_bioxpr_linkers_BeaconPCR_getLine(JNIEnv *env, jobject object, jint a, jobjectArray string){
        //Ceci avait été écrit avant et fonctionnait sous Linux
    //const char *args[a];
    Pourquoi ne pas utiliser des std::vector et des std::string?

    Les VLA (des tableaux C avec une taille determinee dynamiquement), c'est du C99. Ce n'est pas du C++ meme si g++ l'offre en extension (du moins offre quelque chose de semblable).
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    //Modification pour Win mais sans doute fausse
        const char *args[] = new char[a];
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    char const** args = new char*[a];

  3. #3
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Le message d'erreur est pourtant juste, car cette ligne est fausse.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const char *args[] = new char[a];
    args est d�clar� comme un tableau de pointeurs sur des cha�ne de caract�res (const char*[]) et tu veux lui affecter un tableau de caract�res (char[])
    J'imagine que ce que tu souhaites faire c'est:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const char *args[] = new char*[a]
    Ton erreur de portage vient du fait que g++, sans autre pr�cision te permet de d�clarer des tableaux de mani�re 'statique' avec un nombre d'items non pr�cis� � la compilation.
    Ceci est licite en C99, mais pas en C++. Compile ta biblioth�que avec g++ et les options --pedantic --ansi, et tu verras que lui aussi trouvera une erreur dans le code original.
    D'ailleurs avant de porter le code, je te conseille vivement de tout recompiler sous linux avec ces options et de corriger les eventuelles erreurs

    EDIT: grill� par JMB (rapide le lundi matin ;-) )

  4. #4
    Membre exp�riment�
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Seine Saint Denis (�le de France)

    Informations professionnelles :
    Activit� : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par d�faut
    Ok les gars.
    Merci bien.
    Avec vos nouvelles options pour g++, je vais reprendre mon code Linuxien et t�cher de recorriger mon code.
    C'est tr�s int�ressant et je vous remercie.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne r�pond � aucune question technique par MP.

  5. #5
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par VoidSeer
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const char *args[] = new char*[a]
    Ce n'est pas du C++ valide. Il faut utiliser les pointeurs explicitement en dehors des prototypes de fonctions.

  6. #6
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Autant pour moi, j'ai r�pondu un peu vite. Cependant il me semble que dans ce cas,
    c'est plut�t
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    char *const *args = new char *[a]

  7. #7
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    � mon avis tu te trompes VoidSeer.

  8. #8
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par VoidSeer
    Autant pour moi, j'ai r�pondu un peu vite. Cependant il me semble que dans ce cas,
    c'est plut�t
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    char *const *args = new char *[a]

    args est alors un pointeurs vers des pointeurs constant vers des char*. De sort que j'ai comme l'impression que tu ne pourras jamais initialiser la memoire que tu alloues.

  9. #9
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Vivi, d�sol�. J'ai lu le pb en diagonale. C'est juste que la soluce de JM ne compile pas, et que je n'ai pas pris le temps de regarder le pouquoi.
    La soluce exacte est:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    char const ** = new const char * [a];
    La soluce de JM ne compile pas car il est impossible d'affecter � un char** � un const char**.
    La mienne est fausse pour la raison expos�e par JM.
    Enfin, tout �a pour dire que les vector et les string c'est mieux.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me portage code Linux vers Windows
    Par scary dans le forum Windows
    R�ponses: 14
    Dernier message: 11/01/2010, 17h56
  2. R�ponses: 3
    Dernier message: 07/06/2007, 10h49
  3. Sauvegarde automatique linux vers windows
    Par marrmarr dans le forum R�seau
    R�ponses: 2
    Dernier message: 03/08/2006, 14h27
  4. Migration workspace de linux vers windows
    Par cdtkoenig dans le forum Eclipse Java
    R�ponses: 2
    Dernier message: 22/05/2006, 17h42
  5. De Linux vers Windows
    Par Invit�4 dans le forum Linux
    R�ponses: 11
    Dernier message: 04/04/2006, 20h03

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