我有以下课程:
//Rectangle.h
#include "Point.h"
class Rectangle{
public:
Rectangle();
void setWidth(int);
void setHeight(int);
int getWidth();
int getHeight();
void draw(Point);
private:
int m_width;
int m_height;
};
//Rectangle.cpp
#include <Windows.h>
#include <iostream>
#include <GL/Gl.h>
#include <GL/Glu.h>
#include <GL/Glut.h>
#include "Rectangle.h"
#include "Point.h"
//constructor
Rectangle::Rectangle(){
}
int Rectangle::getHeight(){
return m_height;
}
int Rectangle::getWidth(){
return m_width;
}
void Rectangle::setHeight(int a_height){
m_height = a_height;
}
void Rectangle::setWidth(int a_width){
m_width = a_width;
}
void Rectangle::draw(Point center){
int pointWidth = m_width / 2;
int pointHeight = m_height / 2;
std::cout << "drawing rectangle at" << center.getX() << ", " << center.getY() << std::endl;
glColor3f(1, 1, 0);
glBegin(GL_POLYGON);
glVertex2i( center.getX() - pointWidth, center.getY() - pointHeight );
glVertex2i( center.getX() + pointWidth, center.getY() - pointHeight );
glVertex2i( center.getX() + pointWidth, center.getY() + pointHeight );
glVertex2i( center.getX() - pointWidth, center.getY() + pointHeight );
glEnd();
}
然后我在main.cpp中有以下内容。问题在于行vector<Rectangle> rectangles;
我收到以下错误:
std :: vector:Rectangle不是参数&#39; _Ty&#39;
的有效模板类型参数
#include <Windows.h>
#include <math.h>
#include <string>
#include "Rectangle.h"
#include "Point.h"
#include "Pentagon.h"
#include "Star.h"
#include "StringManip.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <GL/Gl.h>
#include <GL/Glu.h>
#include <GL/Glut.h>
using namespace std;
// Function prototypes for callbacks
void myDisplay(void);
void myInit();
void openFile(string);
Point point;
vector<Point> points;
vector<Rectangle> rectangles;
vector<Pentagon> pentagons;
vector<Star> stars;
我对此感到茫然。我想我已经正确地完成了我的课程。如果有人能告诉我什么是错的,我会很感激。
这里是Point.h和Point.cpp
//Point.h
#ifndef POINT_H
#define POINT_H
class Point {
public:
//default constructor
Point () {
m_xCoord = 0;
m_yCoord = 0;
}
//set x and y
void setX(int a_x);
void setY(int a_y);
//get x and y
int getX();
int getY();
//change x and y by a specified value.
void changeX(int a_x);
void changeY(int a_y);
private:
int m_xCoord;
int m_yCoord;
};
#endif
//Point.cpp
#include "Point.h"
void Point::setX(int a_x){
m_xCoord = a_x;
}
void Point::setY(int a_y){
m_yCoord = a_y;
}
int Point::getX(){
return m_xCoord;
}
int Point::getY(){
return m_yCoord;
}
void Point::changeX(int a_x){
m_xCoord += a_x;
if(m_xCoord < 0){
m_xCoord = 0;
}
}
void Point::changeY(int a_y){
m_yCoord += a_y;
if(m_yCoord < 0){
m_yCoord = 0;
}
}
答案 0 :(得分:1)
你包括<Windows.h>
,它将使用许多声明污染全局命名空间,包括与你的类冲突的名为Rectangle
的函数。
如果您确实需要Windows API,那么最好的选择可能是将所有内容放入命名空间。