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

jennemaan
jennemaan (31.594 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 (14.040 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

SQL Server Express Windows Authentication

Oprettet den 22. juli 2010 kl. 21.55
challenge giver 200 point for svar | Giv et svar »

GDI graf

Oprettet den 10. juli 2010 kl. 11.36
challenge giver 200 point for svar | Giv et svar »

Kan en MFC GUI Application Virke på andre Operative...

Oprettet den 6. juli 2010 kl. 17.24
MLundager giver 15 point for svar | Giv et svar »

Seneste guides

100% højde med CSS i alle browsere
XML
Autocad / 3D Max / Revit til Salg.





Tips & Tricks fra PC World

Teaser billede

Sådan får du mest ud af batteriet på din bærbare

Batterierne i den bærbare lever sjældent op til forventningerne, men det er ikke altid batteriernes skyld. Se her hvordan du får mest muligt ud af dine batterier.


Anmeldelser fra PC World

Teaser billede

GTX460: Grafikkort med fin ydelse til rimelige penge

De store grafikkort løber med opmærksomheden, men det er i mellemklassen at de gode køb findes. Et af dem er det helt nye Nvidia GTX460. Se kortets resultater her.


Seneste blogindlæg

Teaser billede

Nu kan du slettes

Det sker af og til at en bruger ønsker at slette sin profil her på Eksperten. Det har vi haft svært ved, men nu kan du gøre det nemt og enkelt. Alt du skal gøre er at logge ind, gå ind på...


Nyheder fra PC World

Teaser billede

Test: Stream nye spil til gamle computere

Det er slut med at investere tusindvis af kroner i dyr hardware for at kunne spille de nyeste spil - amerikansk firma lader stor serverfarm klare arbejdet og streamer spillene til dig via nettet....


Nyheder fra Computerworld

Teaser billede

Test din viden med Computerworlds store sommerquiz

4. del: Brug agurketiden til at få opdateret din viden om it-branchen, og test for sjov om kollegerne på ferie eller derhjemme er lige så skarpe. Computerworld quizzer hver uge hele sommeren.



Kurser
Samarbejdspartnere

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