2010-09-01 5 views
2

Je suis en train de transférer du code de Linux vers Windows et je suis confronté à une erreur étrange. J'ai la classe suivante:Visual Studio 2010 Express Erreur de compilateur de liste STL

(tête)
RegionRectangle.h

#ifndef __RECTANGLE_H__ 
#define __RECTANGLE_H__ 
#include <iostream> 
using namespace std; 
class Rectangle 
{ 
public: 
    Rectangle(int x = 0,int y = 0,int width = 0,int height = 0, int threshold=0); 
    int x(); 
    int y(); 
    int width(); 
    int height(); 
    void x(int); 
    void y(int); 
    void width(int); 
    void height(int); 
    void threshold(int); 
    int threshold(void); 
    friend ostream& operator<<(ostream& output, const Rectangle& r); 
private: 
    int _x; 
    int _y; 
    int _width; 
    int _height; 
    int _threshold; 
}; 

#endif 

(mise en œuvre)

RegionRectangle.cpp

#include "RegionRectangle.h" 

Rectangle::Rectangle(int myx,int myy, int mywidth, int myheight,int threshold) 
{ 
    _x=myx; 
    _y=myy; 
    _width=mywidth; 
    _height=myheight; 
    _threshold=threshold; 
} 
int Rectangle::x(void) 
{ 
    return _x; 
} 
int Rectangle::y(void) 
{ 
    return _y; 
} 
int Rectangle::width(void) 
{ 
    return _width; 
} 
int Rectangle::height(void) 
{ 
    return _height; 
} 

void Rectangle::x(int x) 
{ 
    _x=x; 
} 

void Rectangle::y(int y) 
{ 
    _y=y; 
} 

void Rectangle::width(int width) 
{ 
    _width=width; 
} 

void Rectangle::height(int height) 
{ 
    _height=height; 
} 
void Rectangle::threshold(int thresh) 
{ 
    _threshold=thresh; 
} 
int Rectangle::threshold(void) 
{ 
    return _threshold; 
} 

ostream& operator&lt;&lt;(ostream& output, const Rectangle& p) 
{ 
    output << "[ (" << p._x << "," << p._y << "," << p._width << "," << p._height << "), threshold: " << p._threshold << " ]"; 
    return output; 
} 

J'ai un autre fichier d'en-tête qui a une fonction en tant que telle:

bool hasKey(map<PageNumberSide, list<Rectangle> > myMap, PageNumberSide myKey); 

Les messages d'erreur que je reçois sont les suivants:

enter code here 

Ce troisième fichier de référencement inclut RegionRectangle.h idées pourquoi cela ne fonctionnerait pas?

 
1> Utils.cpp 
1>c:\documents and settings\ferru001\my documents\work\cira_svn\win32_cira\Utils.h(56): error C2923: 'std::list' : 'Rectangle' is not a valid template type argument for parameter '_Ty' 
1>   C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\wingdi.h(3989) : see declaration of 'Rectangle' 
1>c:\documents and settings\ferru001\my documents\work\cira_svn\win32_cira\Utils.h(60): error C2923: 'std::list' : 'Rectangle' is not a valid template type argument for parameter '_Ty' 
1>   C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\wingdi.h(3989) : see declaration of 'Rectangle' 
+1

Veuillez formater votre code correctement, plutôt que d'essayer d'utiliser le balisage HTML (qui ne fonctionne pas ici). Plus précisément, utilisez le bouton "0101" de la barre d'outils pour marquer le code comme code, et ne citez pas "<' and '>" comme "<" et ">". –

+0

aussi quelle est l'erreur du compilateur? –

+0

1> Utils.cpp 1> c: \ documents et paramètres \ ferru001 \ mes documents \ travail \ cira_svn \ win32_cira \ Utils.h (56): erreur C2923: 'std :: liste': 'Rectangle' n'est pas un argument de type de modèle valide pour le paramètre '_Ty' 1> C: \ Program Files \ Microsoft SDK \ Windows \ v7.0A \ include \ wingdi.h (3989): voir la déclaration de 'Rectangle' 1> c: \ documents and paramètres \ ferru001 \ mes documents \ travail \ cira_svn \ win32_cira \ Utils.h (60): erreur C2923: 'std :: list': 'Rectangle' n'est pas un argument de type de modèle valide pour le paramètre '_Ty' –

Répondre

3

La clé est:

C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ include \ wingdi.h (3989) : voir la déclaration de 'Rectangle'

Le compilateur pense que vous faites référence à la fonction Rectangle Win32 SDK dans wingdi.h, pas celle que vous venez de définir. Je suggère de renommer votre rectangle (ou de mettre un espace de nom) et de voir ce qui se passe.

+0

Merci beaucoup, je n'ai évidemment pas regardé de près les messages d'erreur ... été au travail pendant 12 heures :) Merci beaucoup pour votre aide –

Questions connexes