2012-02-16 166 views
0

我有類以下幾點:初始化自定義類的向量?

//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 is not a valid template type argument for parameter '_Ty'

#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

你可以顯示'Point.h'(你包括它的方式,這是不必要的兩次)。 – pmr 2012-02-16 22:54:58

+0

好的。剛剛編輯我的文章 – Cuthbert 2012-02-16 22:58:19

+0

看起來你實際上比''Rectangle'獲得別的東西。你會遇到這個錯誤,例如如果'Rectangle'是一個模板。 – 2012-02-16 23:02:56

回答

1

你包括<Windows.h>,這會污染很多很多的聲明,其中包括一個名爲Rectangle功能,與你的類相沖突的全局命名空間。

如果您確實需要Windows API,那麼您最好的選擇可能是將所有東西放入命名空間中。

+0

普通程序員怎麼知道這一點?誰是如此邪惡,並在全局命名空間中放置一個名爲「Rectangle」的東西? – pmr 2012-02-16 23:27:24