函数数组c ++初始化错误?

时间:2015-11-10 07:07:47

标签: c++ arrays

我正在尝试创建一个布尔函数数组,这是我目前所处的位置。

typedef bool(*fn)(DIYObject*, DIYObject*);


static fn collisionfunctionArray[] =
{   
    DIY::sphere2Sphere
};


bool DIY::sphere2Sphere(DIYObject* obj1, DIYObject* obj2)
{

    DIYSphere *sphere1 = dynamic_cast<DIYSphere*>(obj1);
    DIYSphere *sphere2 = dynamic_cast<DIYSphere*>(obj2);

    if (sphere1 != NULL && sphere2 != NULL)
    {
        float X;
        X= sphere1->m_position.x - sphere2->m_position.x;
        X = X *X; 

        float Y;
        Y = sphere1->m_position.y - sphere2->m_position.y;
        Y = Y *Y;

        float distance;
        distance = sqrt(X + Y);

        float distanceCompare;
        distanceCompare = sphere1->m_radius + sphere2->m_radius;

        if (distance < distanceCompare)
        {
            sphere1->m_velocity = vec3(0,0,0);
            sphere2->m_velocity = vec3(0, 0, 0);
        }

    }
    return false;
}

所以目前我只是尝试在数组中插入一个函数,但是我收到了以下错误

  
    

Error 2 error C2440: 'initializing' : cannot convert from 'bool (__thiscall DIY::* )(DIYObject *,DIYObject *)' to 'fn'

  

我想我会接受相同的论点,所以我不能真正理解这里的问题。感谢

1 个答案:

答案 0 :(得分:1)

问题是sphere2SphereDIY类的成员函数,需要一个对象放入其this指针。

由于您的sphere2Sphere函数未使用this指针(我认为),您可以将其设为static,这意味着它将匹配fn类型(因为编译器会知道它不需要(隐藏的)this参数)。

注意:static关键字位于类定义中的方法声明中,您尚未在此处显示。