簡體   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