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