C++类成员函数的传参问题
最近代码中经常会出现,成员函数传参经常会发生值传不进去的情况,也是比较低级的错误,这里整理一下供大家参考一下。
(1)成员变量名与形参名相同
World::World(unsigned maxContacts, unsigned iterators) { resolver = iterators; maxContacts = maxContacts; contacts = new ParticleContact[maxContacts]; calculateIterations = (iterators == 0); }
这里看一下第4行代码。这里本意是把成员函数的形参传给成员变量,命名的时候两者正好重名。这样写并没有语法错误,但是会导致形参无法传给成员变量。修改方法如下:
World::World(unsigned maxContacts, unsigned iterators) { resolver = iterators; World::maxContacts = maxContacts; contacts = new ParticleContact[maxContacts]; calculateIterations = (iterators == 0); }
此外,还有另一种方法如下:
World::World(unsigned maxContacts, unsigned iterators) { resolver = iterators; this->maxContacts = maxContacts; contacts = new ParticleContact[maxContacts]; calculateIterations = (iterators == 0);
}
(2)类实例赋值给指针
void Particle::SetParticle(Particle particle) { /*m_particle为指针*/ m_particle = &particle; }
这里由于形参particle为局部变量,即使m_paritcle已经指向了了particle,但是运行完这个函数,m_particle指向的还是空的地址。所以,一种方案是加引用,另一种方案就是直接传指针,代码如下:
void Particle::SetParticle(Particle& particle) { /*m_particle为指针*/ m_particle = &particle; }
void Particle::SetParticle(Particle* particle) { /*m_particle为指针*/ m_particle = &particle; }
暂时就这么多,以后遇到继续补充。