gpt4 book ai didi

c++ - 访问类实例的属性

转载 作者:行者123 更新时间:2023-11-28 07:02:32 25 4
gpt4 key购买 nike

我正在尝试让 box2d 模拟以类似于库中包含的 helloWorld 示例的方式将 x 和 y float 打印到屏幕上。我已经设法建立并链接到图书馆。

我有一个类定义了一个球,它应该从屏幕上的一个点落下然后落下。但是当我尝试获取速度时,我无法访问成员数据。

objects.h 内容

class Ball {
public:
bool m_contacting;
b2Body* m_body;
float m_radius;

public:
// Ball class constructor
Ball(b2World* m_world, float radius) {
m_contacting = false;
m_body = NULL;
m_radius = radius;

//set up dynamic body, store in class variable
b2BodyDef myBodyDef;
myBodyDef.type = b2_dynamicBody;
myBodyDef.position.Set(0, 20);
m_body = m_world->CreateBody(&myBodyDef);

//add circle fixture
b2CircleShape circleShape;
circleShape.m_p.Set(0, 0);
circleShape.m_radius = m_radius; //use class variable
b2FixtureDef myFixtureDef;
myFixtureDef.shape = &circleShape;
myFixtureDef.density = 1;
myFixtureDef.restitution = 0.83f;
m_body->CreateFixture(&myFixtureDef);
m_body->SetUserData( this );
m_body->SetGravityScale(5);//cancel gravity (use -1 to reverse gravity, etc)
}
~Ball(){}
};

实例化 - Ball 现在应该处于模拟状态

Ball* ball = new Ball(&world, 1);
balls.push_back(ball);

尝试打印 body 的位置和角度。

b2Vec2 position = m_body->GetPosition();
float32 angle = m_body->GetAngle();

printf("%4.2f %4.2f %4.2f\n", position.x, position.y, angle);

错误消息声明 m_body 未在范围内声明。这看起来很简单,如果我在世界上定义一个 b2Body* body;并针对代码编译和运行进行测试,但随后出现段错误,因为我传递了一个空引用。那么我怎样才能访问我的类实例的属性并将它们打印出来。

我试过使用 b2Vec2 position = Ball::m_body->GetPosition(); & b2Vec2 position = balls->GetPosition();但没有快乐。

最佳答案

m_body 是 Ball 类的成员,您试图在不使用 Ball 对象的情况下访问它。您需要执行以下操作才能获得访问权限

ball->m_body->GetPosition();

或访问存储在 vector 中的 Ball(假设您使用的是 c++11)

for(auto& b : balls)
{
(*b).m_body->GetPosition();
}

for(int i = 0; i < balls.size(); ++i)
{
Ball* b = balls[i];
b->m_body()->GetPosition();
}

理想情况下,您不应该使用原始指针,而应该这样做

Ball ball(&world, 1)
ball.m-body->GetPosition();

或者至少看看智能指针(unique_ptr)等

关于c++ - 访问类实例的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com