2011-04-29 4 views
0

Obtenir un tas d'erreurs et ils sont très cryptiques.Erreur dans la liste C++ :: tri

est ici tout le code correspondant:

// list::sort 
#include <iostream> 
#include <list> 
#include <string> 
#include <cctype> 
#include "main.h" 

using namespace std; 

struct texture 
{ 
    int texture; 
    int ref; 
}; 

bool compare_nocase (texture first, texture second) 
{ 
    if(first.texture < second.texture) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

int main() 
{ 
    list<texture> mylist; 
    list<texture>::iterator it; 

    texture moose; 
    moose.ref = 3; 
    moose.texture = 6; 

    texture moose2; 
    moose2.ref = 1; 
    moose2.texture = 3; 

    texture moose3; 
    moose3.ref = 2; 
    moose3.texture = 14; 

    mylist.push_back (moose); 
    mylist.push_back (moose2); 
    mylist.push_back (moose3); 

    cout << "before sort mylist contains:"; 
    for (it=mylist.begin(); it!=mylist.end(); ++it) 
     cout << it->texture << endl; 
    cout << endl; 


    mylist.sort(compare_nocase); 

    cout << "after sort mylist contains:"; 
    for (it=mylist.begin(); it!=mylist.end(); ++it) 
    cout << it->texture << endl; 
    cout << endl; 

    return 0; 
} 

Je suis juste tester la fonction de tri STL mais je reçois les erreurs:

c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(12): error C2380: type(s) preceding 'texture' (constructor with return type, or illegal redefinition of current class-name?) 
1>c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(18): error C2274: 'function-style cast' : illegal as right side of '.' operator 
1>c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(18): error C2274: 'function-style cast' : illegal as right side of '.' operator 
1>c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(35): error C2274: 'function-style cast' : illegal as right side of '.' operator 
1>c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(39): error C2274: 'function-style cast' : illegal as right side of '.' operator 
1>c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(43): error C2274: 'function-style cast' : illegal as right side of '.' operator 
1>c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(51): error C2273: 'function-style cast' : illegal as right side of '->' operator 
1>c:\users\spaniel\documents\visual studio 2010\projects\list\list\main.cpp(59): error C2273: 'function-style cast' : illegal as right side of '->' operator 

Répondre

6

Vous avez un membre structtexture avec le même nom que le struct lui-même.

Apparemment VS 2010 n'aime pas cela, bien que GCC 4.1.2 soit correct. Je ne sais pas ce qui est correct ...

+1

Dieu, je suis un idiot. Je vous remercie! – Juiceyboxers

+0

Oui, gcc est vraiment OK avec ça et je ne vois pas de raison, c'est faux:? –

+0

Il y a une bonne raison pour que ce soit faux. Cela rend les références à 'texture' à l'intérieur des fonctions membres de la structure hautement ambiguës et confuses. Ceci est particulièrement un problème si n'importe quel type 'texture' définit' operator() '. Ensuite, vous ne pouvez même pas dire si vous essayez de construire une nouvelle 'texture' ou d'utiliser l'opérateur d'appel de fonction sur le membre' texture'. – Omnifarious

0

Je crains que vous ne pouvez pas faire comme ceci:

struct texture 
{ 
     v name is conflicted with struct name 
    int texture; 
    int ref; 
};