繁体   English   中英

在C ++中使用向量时,Push_back导致错误

[英]Push_back causing an error when using vectors in C++

我在编译这段代码时遇到了问题。 我在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的设置有什么关系,但似乎如果我使用这里的代码,代替我的向量调用,它仍然会编译同样的错误。

这里:

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

... 将工作。

你不能在函数之外有声明。 所以这一行:

 lines.push_back(lp);

需要放在一个函数中。

在函数之外定义是可以的,这就是为什么这些行没问题:

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

除非它是一个拼写错误,否则在任何函数之外都有开放的代码。 这在C ++中是不允许的。 你必须把它放在一个函数或方法中。 如果您希望它立即运行,请将其放在int main() { ...}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM