Visual Studio 2010 Express STL ошибка компилятора списка - PullRequest
2 голосов
/ 02 сентября 2010

Я портирую некоторый код из linux на windows и выхожу с какой-то странной ошибкой.У меня есть следующий класс:

(заголовок)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

(реализация)

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;
}

У меня есть другой заголовочный файл с такой функцией:

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

Я получаю следующие сообщения об ошибках:

enter code here

Этот третий файл ссылок содержит файл RegionRectangle.h. Есть идеи, почему это не сработает?

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 Ответ

3 голосов
/ 02 сентября 2010

Ключ:

C: \ Program Files \ Microsoft SDK \ Windows \ v7.0A \ include \ wingdi.h (3989) : см. объявление «Прямоугольник»

Компилятор считает, что вы ссылаетесь на функцию Win32 SDK Rectangle в wingdi.h, а не на ту, которую вы только что определили. Я предлагаю переименовать ваш прямоугольник (или вставить пространство имен) и посмотреть, что произойдет.

...