2010-01-30 69 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() { ...}