2010-01-30 65 views
4

我在編譯這段代碼時遇到了問題。我正在使用OS X 10.6上的Eclipse進行編譯。這個問題似乎只在使用矢量時纔會發生。我似乎無法使用push_back功能。每次嘗試時,我都會收到「預期的構造函數,析構函數或類型轉換之前的錯誤」。令牌」。下面是我的一小段代碼:Push_back在C++中使用向量時導致錯誤

#include <GLUT/glut.h> 
#include <vector> 
#include <stdlib.h> 
#include <iostream> 
#include <math.h> 
using namespace std; 
enum Colour {BLACK =0, RED=1, BLUE=2, GREEN=3, PURPLE=4, ORANGE=5, CYAN=6, BLANK=7}; 

class Point { 
private: 
    GLfloat xval, yval; 
public: 
    Point(float x =0.0, float y = 0.0){ 
     xval=x; 
     yval=y; 
    } 

    GLfloat x() {return xval;} 
    GLfloat y() {return yval;} 
}; 


class LinePoint { 
private: 
    Point p; 
    Colour cNum; 
public: 
    LinePoint(Point pnt = Point(0,0), Colour c = BLACK){ 
     cNum = c; 
     p = pnt; 
    } 
    Point getPoint(){return p;} 
    Colour getColour(){return cNum;} 
}; 
float turtleScale = 20; 
Point turtlePos = Point(300./turtleScale,200./turtleScale); 
LinePoint* lp = new LinePoint(turtlePos,BLACK); 

vector<LinePoint*> lines; 

lines.push_back(lp); 

我不知道這是否會有什麼用Eclipse是如何設置,但它似乎也,如果我使用位於here代碼,代替我矢量調用,它仍然編譯相同的錯誤。

回答

10

這裏:

float turtleScale = 20; 
Point turtlePos = Point(300./turtleScale,200./turtleScale); 
LinePoint* lp = new LinePoint(turtlePos,BLACK); 

vector<LinePoint*> lines; 

...您使用的初始化,但這:

lines.push_back(lp); 

...是一個說法!它必須生活在一個功能:)

int main() 
{ 
    lines.push_back(lp); 
} 

...將工作。

+0

而我正式是一個noob :)感謝您的幫助,我是新來的C++,並不知道這個事實。 – fastrack20 2010-01-30 00:57:00

+1

技術上其餘的都是*初始化*。作業也不被允許。 – UncleBens 2010-01-30 01:28:30

+0

@UncleBens - 這就是我的意思,感謝您的更正 – 2010-01-30 01:41:52

4

你不能在一個函數之外有一個語句。所以這行:

lines.push_back(lp); 

需要放在一個函數中。

沒關係有一個功能,這就是爲什麼這些線都還好外面的定義:

float turtleScale = 20; 
Point turtlePos = Point(300./turtleScale,200./turtleScale); 
LinePoint* lp = new LinePoint(turtlePos,BLACK); 
4

除非它是一個錯字,你有代碼的開放,在任何函數之外。這在C++中是不允許的。你必須把它放在一個函數或方法中。如果你想讓它馬上運行,把它放在int main() { ...}