Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 另一个c++;池球对象数组问题_C++_Arrays_Object - Fatal编程技术网

C++ 另一个c++;池球对象数组问题

C++ 另一个c++;池球对象数组问题,c++,arrays,object,C++,Arrays,Object,所以我遇到了一个问题,当我请求位置时,我似乎总是得到最后一个球的位置。当我声明对象时,对象中的值没有被正确分配 这是我目前的情况 ball TestBall[2]; 在方法内声明变量 void ball::Placeball() { //TEMP TEST TestBall[1].DrawBall(5,0.15,10,3,10); //TEMP TEST TestBall[2].DrawBall(5,0.15,10,3,30); } 我的Draw Ball方

所以我遇到了一个问题,当我请求位置时,我似乎总是得到最后一个球的位置。当我声明对象时,对象中的值没有被正确分配

这是我目前的情况

ball TestBall[2];
在方法内声明变量

void ball::Placeball() {
    //TEMP TEST
    TestBall[1].DrawBall(5,0.15,10,3,10);

    //TEMP TEST
    TestBall[2].DrawBall(5,0.15,10,3,30);
}
我的Draw Ball方法和变量的传递方式

void ball::DrawBall(float radius, float mass, float x, float y, float z) {
    xPos = x;
    yPos = y;
    zPos = z;

    GLUquadricObj *quadratic;
    quadratic = gluNewQuadric();

    glPolygonMode(GL_FRONT,GL_FILL);
    glPolygonMode(GL_BACK,GL_FILL);
    gluQuadricNormals(quadratic,GLU_SMOOTH);

    glTranslatef(x,y,z);
    gluSphere(quadratic,radius,20,20);
    glTranslatef(-x,-y,-z);
}
正在传递的变量我无法开始工作

float ball::zPos
以及它是如何被找回的

float ball::GetZ() const {
    return zPos;
}
然后,我如何简单地尝试获得价值

cout << TestBall[1].GetZ() << endl; //should be 10
cout << TestBall[2].GetZ() << endl; //should be 30
ball.h

float ball::xPos = 0;
float ball::yPos = 0;
float ball::zPos = 0;

ball::ball() { };

void ball::DrawBall(float radius, float mass, float x, float y, float z) {
    xPos = x;
    yPos = y;
    zPos = z;

    GLUquadricObj *quadratic;
    quadratic = gluNewQuadric();

    glPolygonMode(GL_FRONT,GL_FILL);
    glPolygonMode(GL_BACK,GL_FILL);
    gluQuadricNormals(quadratic,GLU_SMOOTH);

    glTranslatef(x,y,z);
    gluSphere(quadratic,radius,20,20);
    glTranslatef(-x,-y,-z);
}

float ball::GetX() const {
    return xPos;
}

float ball::GetY() const {
    return yPos;
}

float ball::GetZ() const {
    return zPos;
}
#pragma once
class ball
{
private:
    static float xPos;
    static float yPos;
    static float zPos;

public:
    ball();
    ball(float radius, float mass, float x, float y, float z){};
    ~ball(){};
    static void DrawBall(float radius, float mass, float x, float y, float z);
    static void UpdateBall(float speedx, float speedz);
    static void Placeball();


    float GetX() const;
    float GetY() const;
    float GetZ() const;
};
两个值都读取30,如果我增加对象数组的大小,这是相同的问题

很可能我错过了一些简单的东西


谢谢你的时间。

< P> C++中,数组索引是0,所以有效的索引为<代码>球测试球[2 ];<代码>是
TestBall[0]
TestBall[1]
。访问
TestBall[2]
调用,写入它肯定会导致内存损坏

编辑:(回答正在编辑以显示球的定义的问题)


xPos
yPos
zPos
trablell
UpdateBall
、和
Placeball
中删除
static
,行为应如您所料。您需要在
ball
的构造函数中而不是在命名空间范围内初始化
xpo
yPos
zPos

已经用它更新了我的代码,感谢您的发现-我忘记了,问题仍然存在。谢谢你的评论@罗德尼:你能编辑你的问题来显示
ball
的类定义吗?@ildjarn Done。包括.cpp和.h以澄清您可能需要的任何内容need@Rodney:答案已编辑。让所有的类成员都
静态
是个问题。@ildjarn非常感谢!非常感谢您的快速响应,我想这对我来说是一个糟糕的做法,实际上使一切都是静态的-您能重复告诉我声明它们是静态的有什么问题吗?