Push_back вызывает ошибку при использовании векторов в C ++ - PullRequest
4 голосов
/ 30 января 2010

У меня проблемы с получением этого кода для компиляции. Я компилирую с Eclipse на OS X 10.6. Кажется, проблема возникает только при использовании векторов. Я не могу использовать функцию 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, но также кажется, что если я использую код, расположенный здесь , вместо моих векторных вызовов, он все равно будет та же ошибка.

Ответы [ 3 ]

10 голосов
/ 30 января 2010

Здесь:

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

... будет работать.

4 голосов
/ 30 января 2010

Если это не опечатка, у вас есть код в открытом состоянии, вне какой-либо функции. Это не разрешено в C ++. Вместо этого вы должны поместить его в функцию или метод. Если вы хотите, чтобы он запускался сразу, поместите его в int main() { ...}.

4 голосов
/ 30 января 2010

Вы не можете иметь оператор вне функции. Итак, эта строка:

 lines.push_back(lp);

необходимо поместить в функцию.

Можно иметь определения вне функции, поэтому эти строки в порядке:

float turtleScale = 20;
Point turtlePos = Point(300./turtleScale,200./turtleScale);
LinePoint* lp = new LinePoint(turtlePos,BLACK);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...