我在编译这段代码时遇到了问题。我在OS X 10.6上使用Eclipse进行编译。问题似乎只在使用向量时才会发生。我似乎根本无法使用push_back函数。每次我尝试,我得到错误“预期构造函数,析构函数或类型转换之前'。'令牌”。以下是我的代码的几个片段:
#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的代码,代替我的向量调用,它仍然可以编译错误。
答案 0 :(得分: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);
}
......会奏效。
答案 1 :(得分:4)
您不能在函数之外使用语句。所以这一行:
lines.push_back(lp);
需要放在一个函数中。
在函数之外定义是可以的,这就是为什么这些行是可以的:
float turtleScale = 20;
Point turtlePos = Point(300./turtleScale,200./turtleScale);
LinePoint* lp = new LinePoint(turtlePos,BLACK);
答案 2 :(得分:4)
除非是拼写错误,否则在任何函数之外都有开放代码。这在C ++中是不允许的。你必须把它放在一个函数或方法中。如果您希望它立即运行,请将其放在int main() { ...}
。