none
compilation errors pointing : xiosbase RRS feed

  • Question

  • Hello,

    I am trying to compile a project (ROOT_v5.34.03) but I have some errors which are apparently linked to the file xiobase. Indeed the ROOT code was compiled with Visual Studio 2008 and worked well. So I checked and compared the xiosbase files from VS2008 and VS2012 and they are affectively different. Does somebody know what changed?

    Here are the error lines I had during the generation of the solution (sorry errors are written in french) :

    c:\PFiles\root_v5.34.03.source\root\cint\cint\src\dict\iccstrm.cxx(235): error C2248: 'std::ios_base::ios_base' : impossible d'accéder à private membre déclaré(e) dans la classe 'std::ios_base'

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xiosbase(650) : voir la déclaration de 'std::ios_base::ios_base'

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xiosbase(202) : voir la déclaration de 'std::ios_base'

    Note : I already encountered another compilation error. The file "sehmap.h" was missing in the ..\VC\include folder.

    P.S. : This is my first post here and I do not know exactly how this forum works. Thanks to tell me if I am not in the right one. Is the current language is english, french...?

    Sam

    vendredi 4 janvier 2013 13:05

Réponses

  • Au moment de l'écriture de ce commentaire il semble que ROOT_v5.34.03.source ne puisse pas être compilé avec Visual Studio 2012 à cause d'une incompatibilité de CINT en particulier à cause de l'implémentation de ses librairies (voir le site de ROOT et son forum pour plus de détails).

    Sam

    • Marqué comme réponse Aurel Bera lundi 7 janvier 2013 12:33
    lundi 7 janvier 2013 11:54

Toutes les réponses

  • Le problème ne vient pas du fichier xiosbase.

    Vous n'indiquez pas quel est le code qui génère l'erreur, dans le fichier cpp, mais je pense qu'il s'agit d'une tentative d'appel du constructeur d'un objet ios_base.

    Or le constructeur de la classe ios_base est privé. Il est interdit de créer directement des objets de ce type. Seuls des objets de classes dérivées de ios_base peuvent être créés.

    Vous devez corriger votre code, dans iccstrm.cxx.

    vendredi 4 janvier 2013 21:56
    Auteur de réponse
  • OK merci. C'est ce que j'avais cru comprendre en lisant le message d'erreur. En effet, j'ai jeté un œil dans le code iccstrm.cxx. Le constructeur de la classe ios_base est bien appelée directement. Voici le bout de code correspondant:

    static int G__G__stream_6_7_1(G__value* result7, G__CONST char* funcname, struct G__param* libp, int hash)
    
    {
       ios_base* p;	
       void* tmp = (void*) G__int(libp->para[0]);
       p = new ios_base(*(ios_base*) tmp);
       result7->obj.i = (long) p;
       result7->ref = (long) p;
       result7->type = 'u';
       result7->tagnum = G__get_linked_tagnum(&G__G__streamLN_ios_base);
       return(1 || funcname || hash || result7 || libp) ;
    }

    Je vais essayer d'envoyer un message à l'un des rédacteurs du code ci-dessus. Je ne sais pas réellement quelle classe dérivée je dois utilisé dans ce cas précis. Dans la librairies standard c++ la classe ios dérive de ios_base. Peut-être pourrais-je l'utiliser à la place. Lorsque cette erreur sera résolue je posterai le résultat.

    En tout cas merci pour la réponse.

    Sam

    lundi 7 janvier 2013 08:25
  • Au moment de l'écriture de ce commentaire il semble que ROOT_v5.34.03.source ne puisse pas être compilé avec Visual Studio 2012 à cause d'une incompatibilité de CINT en particulier à cause de l'implémentation de ses librairies (voir le site de ROOT et son forum pour plus de détails).

    Sam

    • Marqué comme réponse Aurel Bera lundi 7 janvier 2013 12:33
    lundi 7 janvier 2013 11:54