Having trouble with passing array of pointers to functions to other functions
<p>I'm getting this error:</p>

<pre><code>error C2664: 'KaibaMainPhase' : cannot convert parameter 1 from
'void (__cdecl *[2])(std::vector&lt;_Ty&gt; &amp;,
std::vector&lt;_Ty&gt;&amp;,
std::vector&lt;std::vector&lt;_Ty&gt;&gt; &amp;,
std::vector&lt;_Ty&gt; &amp;,std::vector&lt;_Ty&gt; &amp;)'
to 'void (__cdecl *)(std::vector&lt;_Ty&gt; &amp;,
std::vector&lt;Card&gt; &amp;,
std::vector&lt;Card&gt; &amp;)"
</code></pre>

<p>Here's my code:</p>

<pre><code>class Card
{
public:
string GetName() {return Name;}
void SetName(const string&amp; setName) {Name = setName; } 
void SetType(const string&amp; setType) {Type = setType; }

private:
string Name;
string Type;
};

vector&lt; vector&lt;Card&gt; &gt; Field(4, vector&lt;Card&gt;(5));
vector&lt;Card&gt; KaibaHand;
vector&lt;Card&gt;::iterator KH;
vector&lt;Card&gt; YugiHand;
vector&lt;Card&gt;::iterator YH;

vector&lt;Card&gt; KaibaGraveyard;
vector&lt;Card&gt;::iterator KG;
vector&lt;Card&gt; YugiGraveyard;
vector&lt;Card&gt;::iterator YG;


void KaibaBeginning(vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck);
void DrawForKaiba(vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck);
void KaibaMainPhase(void (*)(vector&lt; vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;KaibaGraveyard,
vector&lt;Card&gt; &amp;YugiGraveyard), vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck, vector&lt;
vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;YugiGraveyard, vector&lt;Card&gt; &amp;KaibaGraveyard);


void FieldFunction(vector&lt; vector&lt;Card&gt; &gt; &amp;Field);
void KaibaHandFunction(vector&lt;Card&gt; &amp;KaibaHand);
void KaibaGraveyardFunction(vector&lt;Card&gt; &amp;KaibaGraveyard);
void YugiGraveyardFunction(vector&lt;Card&gt; &amp;YugiGraveyard);
void KaibaSummon(vector&lt; vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;KaibaHand, int HandNumber, int
MonstCount);
void YugiSummon(vector&lt; vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;YugiHand, int HandNumber, int
MonstCount);
void KaibaDiscard(int HandNumber, vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaGraveyard);
void YugiDiscard(int HandNumber, vector&lt;Card&gt; &amp;YugiHand, vector&lt;Card&gt; &amp;YugiGraveyard);


void KaibaMainPhase(void (*)(vector&lt; vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;KaibaGraveyard,
vector&lt;Card&gt; &amp;YugiGraveyard), vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck,
vector&lt;vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;YugiGraveyard, vector&lt;Card&gt; &amp;KaibaGraveyard);


void HEAVYSTORM(vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck, vector&lt; vector&lt;Card&gt; &gt; &amp;Field,
vector&lt;Card&gt; &amp;KaibaGraveyard, vector&lt;Card&gt; &amp;YugiGraveyard)
{
cout&lt;&lt;"This card destroys ALL magic and traps cards on the field!!"&lt;&lt;endl;
    for (int i=0; i&lt;5; i++)
    {
        YugiGraveyard.push_back(Field[0][i]);
    Field[0][i]=Card();
        KaibaGraveyard.push_back(Field[3][i]);
        Field[3][i]=Card();
    }   
}

void POTOFGREED(vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck, vector&lt; vector&lt;Card&gt; &gt; &amp;Field,
vector&lt;Card&gt; &amp;KaibaGraveyard, vector&lt;Card&gt; &amp;YugiGraveyard)
{
DrawForKaiba(KaibaHand, KaibaDeck);
}


int main()
{

void (* pFunct[2]) (vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck, vector&lt; vector&lt;Card&gt; &gt;
&amp;Field, vector&lt;Card&gt; &amp;KaibaGraveyard, vector&lt;Card&gt; &amp;YugiGraveyard);
pFunct[0] = HEAVYSTORM;
pFunct[1] = POTOFGREED;


KaibaMainPhase(pFunct, KaibaHand, KaibaDeck, Field, YugiGraveyard, KaibaGraveyard);
}


void KaibaMainPhase( void (*pFunct)(vector&lt;Card&gt; &amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck, vector&lt;
vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;KaibaGraveyard, vector&lt;Card&gt; &amp;YugiGraveyard), vector&lt;Card&gt;
&amp;KaibaHand, vector&lt;Card&gt; &amp;KaibaDeck, vector&lt; vector&lt;Card&gt; &gt; &amp;Field, vector&lt;Card&gt; &amp;YugiGraveyard,
vector&lt;Card&gt; &amp;KaibaGraveyard)
{
int HandNum;
cout&lt;&lt;"Enter a number: "&lt;&lt;endl;
cin&gt;&gt;HandNum;
cout&lt;&lt;"You played "&lt;&lt;Field[3][HandNum-1].GetName();
pFunct[HandNum-1](KaibaHand, KaibaDeck, Field, KaibaGraveyard, YugiGraveyard);//
}

void KaibaHandFunction(vector&lt;Card&gt; &amp;KaibaHand)
{
    cout&lt;&lt;endl&lt;&lt;"Kaiba's hand contains: "&lt;&lt;endl;
    for (KH=KaibaHand.begin(); KH&lt;KaibaHand.end(); KH++)
    {
        cout&lt;&lt;KH-&gt;GetName()&lt;&lt;endl;

    }
}

void YugiHandFunction(vector&lt;Card&gt; &amp;YugiHand)
{
    cout&lt;&lt;endl&lt;&lt;"Yugi's hand contains: "&lt;&lt;endl;
    for (YH=YugiHand.begin(); YH&lt;YugiHand.end(); YH++)
    {
        cout&lt;&lt;YH-&gt;GetName()&lt;&lt;endl;

    }
}

void KaibaGraveyardFunction(vector&lt;Card&gt; &amp;KaibaGraveyard)
{
        cout&lt;&lt;endl&lt;&lt;"Kaiba's graveyard contains: "&lt;&lt;endl;
        for (KG=KaibaGraveyard.begin(); KG&lt;KaibaGraveyard.end(); KG++)
        {
            cout&lt;&lt;KG-&gt;GetName()&lt;&lt;endl; //SAME AS (*gt).GetName
        }
        cout&lt;&lt;"\n";
}

void YugiGraveyardFunction(vector&lt;Card&gt; &amp;YugiGraveyard)
{
        cout&lt;&lt;endl&lt;&lt;"Yugi's graveyard contains: "&lt;&lt;endl;
        for (YG=YugiGraveyard.begin(); YG&lt;YugiGraveyard.end(); YG++)
        {
            cout&lt;&lt;YG-&gt;GetName()&lt;&lt;endl; //SAME AS (*gt).GetName
        }
        cout&lt;&lt;"\n";
</code></pre>
