VC++ und std::pair



  • Hallo Leute!

    bcc55, bcb6, dmc++ und gcc uebersetzen folgenden code korrekt. nur der vc++ meckert:

    int const numMimeTypes = 175;
    
        char const* const mimeTypes[numMimeTypes][2]={/*...*/}
    
        char const* getMimeType(char const* extension)
        {
            std::pair<char const** const, char const** const> result=std::equal_range(mimeTypes, mimeTypes+numMimeTypes, extension, mimeCompare());
            if(result.first==result.second)
            {
                return "";
            }
            return result.first[1];
        }
    

    der vc++7 sagt mir aber:

    error C2440: 'initializing' : cannot convert from 'const char *const (*const )
    [2]' to 'const char **const  '
            Types pointed to are unrelated; conversion requires reinterpret_cast, 
    C-style cast or function-style cast
            c:\code\cpp\cppgi\mime.cpp(242) : see reference to function template 
    instantiation 'std::pair<_Ty1,_Ty2>::pair(const std::pair<_FwdIt,const char 
    *const (*)[2]> &)' being compiled
            with
            [
                _Ty1=const char **const  ,
                _Ty2=const char **const  ,
                _FwdIt=const char *const (*)[2]
            ]
    

    warum will der vc++ das nicht und vorallem: was will er von mir 😕



  • warum will der vc++ das nicht und vorallem: was will er von mir

    Der Comeau beschwert sich ebenfalls.

    Der Typ von mimeTimes und damit auch der Typ der beiden von equal_range gelieferten Iteratoren ist:
    const char *const (*)[2] also Zeiger auf Array von const-Zeiger auf const-Char.

    Dieser Typ ist aber nicht konvertierbar nach
    char const** const.

    Das ist hier die typische "Ein eindimensionales Array verhält sich in den meisten Situationen wie ein Zeiger auf das erste Element. Aus einen int-Array wird also int*. Das gilt auch für 2Dimensionale Arrays. Nur vergisst man hier allzu oft, dass die Elemente hier Arrays sind. Ein int arr[2][3] wird also nicht zu int** sondern zu int (*)[3]."-Situation.



  • nun gut, doch wie löse ich das problem?

    schliesslich kann ich ja nicht std::pair mit einem array anlegen 😞


Anmelden zum Antworten