初始化自定义类的向量?

时间:2012-02-16 22:51:17

标签: c++ class vector

我有以下课程:

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

1 个答案:

答案 0 :(得分:1)

你包括<Windows.h>,它将使用许多声明污染全局命名空间,包括与你的类冲突的名为Rectangle的函数。

如果您确实需要Windows API,那么最好的选择可能是将所有内容放入命名空间。