【问题标题】:Push_back causing an error when using vectors in C++在 C++ 中使用向量时 Push_back 导致错误
【发布时间】:2010-01-30 00:50:14
【问题描述】:

我在编译这段代码时遇到问题。我在 OS X 10.6 上使用 Eclipse 进行编译。该问题似乎仅在使用向量时出现。我似乎根本无法使用 push_back 功能。每次尝试时,我都会收到错误“预期的构造函数、析构函数或类型转换之前。”令牌”。以下是我的代码的一些 sn-ps:

#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 的代码代替我的向量调用,它仍然会以相同的错误进行编译。

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    这里:

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

    ...会起作用的。

    【讨论】:

    • 我是正式的菜鸟 :) 感谢您的帮助,我是 C++ 新手,不知道这个事实。
    • 技术上剩下的是初始化。也不允许分配。
    • @UncleBen & @Kornel - 使这些在函数之外合法的原因在于它们是定义
    【解决方案2】:

    你不能有一个函数之外的语句。所以这一行:

     lines.push_back(lp);
    

    需要放在函数中。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多