Oprettet fre. d. 08. januar 2010 kl. 10:10:16

jennemaan
jennemaan (34.339 point. Point ude: 60)

VS2008 STL Compiler Problem... (error C2784)

Hej folks,

jeg har følgende stump kode:

// Find item with id in table. If the item was not found, the function
    // the function returns the default value.
    //
    template <class Id_Type, class Val_Type>
    Val_Type find_value(const std::vector<ItemInfo<Id_Type, Val_Type> >& table,        // Table to search
                        const Id_Type& id,                                            // Value (item ID) to search for
                        const Val_Type& default_value)                                // Default value if the item was not found in table
    {
        std::vector<ItemInfo<Id_Type, Val_Type> >::const_iterator p = std::lower_bound(table.begin(), table.end(),id);

        if (p != table.end() && *p == id)
            return (*p).get_value();
        else
            return default_value;
    }


Koden bygger fint under VC7 (VS 2003), men fejler under VC9!

Her er output:

1>Compiling...
1>item_util.cpp
1>c:\program files\microsoft visual studio 9.0\vc\include\xutility(263) : error C2784: 'bool std::operator <(const std::list<_Ty,_Ax> &,const std::list<_Ty,_Ax> &)' : could not deduce template argument for 'const std::list<_Ty,_Ax> &' from 'const int'
1>        c:\program files\microsoft visual studio 9.0\vc\include\list(1310) : see declaration of 'std::operator <'
1>        c:\program files\microsoft visual studio 9.0\vc\include\algorithm(2262) : see reference to function template instantiation 'bool std::_Debug_lt<ItemUtil::ItemInfo<Id_Type,Val_Type>,_Ty>(const _Ty1 &,const _Ty2 &,const wchar_t *,unsigned int)' being compiled
1>        with
1>        [
1>            Id_Type=int,
1>            Val_Type=int,
1>            _Ty=int,
1>            _Ty1=ItemUtil::ItemInfo<int,int>,
1>            _Ty2=int
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\include\algorithm(2274) : see reference to function template instantiation '_FwdIt std::_Lower_bound<std::_Vector_const_iterator<_Ty,_Alloc>,int,__w64 int>(_FwdIt,_FwdIt,const int &,_Diff *)' being compiled
1>        with
1>        [
1>            _FwdIt=std::_Vector_const_iterator<ItemUtil::ItemInfo<int,int>,std::allocator<ItemUtil::ItemInfo<int,int>>>,
1>            _Ty=ItemUtil::ItemInfo<int,int>,
1>            _Alloc=std::allocator<ItemUtil::ItemInfo<int,int>>,
1>            _Diff=__w64 int
1>        ]
1>        d:\anylib2008\libraries\utility\item_util.cpp(63) : see reference to function template instantiation '_FwdIt std::lower_bound<std::_Vector_const_iterator<_Ty,_Alloc>,Id_Type>(_FwdIt,_FwdIt,const int &)' being compiled
1>        with
1>        [
1>            _FwdIt=std::_Vector_const_iterator<ItemUtil::ItemInfo<int,int>,std::allocator<ItemUtil::ItemInfo<int,int>>>,
1>            _Ty=ItemUtil::ItemInfo<int,int>,
1>            _Alloc=std::allocator<ItemUtil::ItemInfo<int,int>>,
1>            Id_Type=int
1>        ]
1>        d:\anylib2008\libraries\utility\item_util.cpp(98) : see reference to function template instantiation 'Val_Type ItemUtil::find_value<int,int>(const std::vector<_Ty> &,const Id_Type &,const Val_Type &)' being compiled
1>        with
1>        [
1>            Val_Type=int,
1>            _Ty=ItemUtil::ItemInfo<int,int>,
1>            Id_Type=int
1>        ]

Jeg har en mistanke om at det er en bug i VS2008... Det er meget sparsomt hvad jeg har kunne finde på MSDN og andre steder på nettet... Det ser ud som om at 'id' bliver opfattet som en __w64 int og ikke en int. Jeg bygger ren 32bit...


Nogen gode forslag til workarounds?

//Jens

Skrevet søn. d. 10. januar 2010 kl. 01:03:58| #1

bertelbrander
bertelbrander (16.710 point)
Jeg har ikke umiddelbart problemer med at compile det med VC9...
Jeg brugte denne dummy for ItemInfo:
template <typename id, typename val>
class ItemInfo
{
};

Det kunne tyde på at problemet er med ItemInfo, kan vi få at se hvordan den ser ud? Det ville være allerbedst om vi kunne få et komplet program der viser fejlen.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Regex sætning i C++

Oprettet den 30. januar 2012 kl. 22.55
kjeldsted giver 150 point for svar | Giv et svar »

Bog om strukturering

Oprettet den 25. januar 2012 kl. 07.26
keepy giver 30 point for svar | Giv et svar »

Opsnap keypress globalt.

Oprettet den 24. januar 2012 kl. 16.14
xited giver 200 point for svar | Giv et svar »

Seneste guides

Den gode bruger
Adgang til NAS-server via WAN
Kollektion af Batch tutorials (FJERNET)
Tilpas din YouTube afspiller


   




Tips & Tricks fra PC World

Teaser billede

Sådan fjerner du pladskrævende metadata fra dine fotos

Det er langt fra altid, at dine billeders metadata såsom kameramodel og geografisk placering er vigtige at bevare. JPG & PNG Stripper kan luge ud i billedfilerne, så de fylder meget mindre....


Anmeldelser fra PC World

Teaser billede

Test: Superlet bærbar med mange muligheder

Toshiba har med Satellite Z830 skabt en af verdens letteste ultrabooks. Den vejer 1,1 kilo, og computeren på 13 tommer ser på papiret ud til at være en oplagt rejsekammerat. Men den lave vægt har...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Samsung Galaxy S III på vej

Samsungs bedst sælgende smartphone nogensinde får en efterfølger om kort tid.


Nyheder fra Computerworld

Teaser billede

Apple retter hele 51 sikkerhedshuller i Mac OS X

Apple lukker hele 51 sårbarheder i Mac OS X, hvoraf de fleste er kritiske. Se her, hvor hullerne er.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger