Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++ - Fatal编程技术网

C++ 将指向函数的指针数组传递给其他函数时遇到问题

C++ 将指向函数的指针数组传递给其他函数时遇到问题,c++,C++,我得到了这个错误: error C2664: 'KaibaMainPhase' : cannot convert parameter 1 from 'void (__cdecl *[2])(std::vector<_Ty> &, std::vector<_Ty>&, std::vector<std::vector<_Ty>> &, std::vector<_Ty> &,std::vector<_Ty

我得到了这个错误:

error C2664: 'KaibaMainPhase' : cannot convert parameter 1 from
'void (__cdecl *[2])(std::vector<_Ty> &,
std::vector<_Ty>&,
std::vector<std::vector<_Ty>> &,
std::vector<_Ty> &,std::vector<_Ty> &)'
to 'void (__cdecl *)(std::vector<_Ty> &,
std::vector<Card> &,
std::vector<Card> &)"
错误C2664:“KaibamanPhase”:无法从转换参数1
'void(uu cdecl*[2])(标准::向量&,
std::向量&,
std::向量&,
std::vector&,std::vector&)
到'void(uu cdecl*)(标准::向量&,
std::向量&,
std::vector&)
这是我的密码:

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

private:
string Name;
string Type;
};

vector< vector<Card> > Field(4, vector<Card>(5));
vector<Card> KaibaHand;
vector<Card>::iterator KH;
vector<Card> YugiHand;
vector<Card>::iterator YH;

vector<Card> KaibaGraveyard;
vector<Card>::iterator KG;
vector<Card> YugiGraveyard;
vector<Card>::iterator YG;


void KaibaBeginning(vector<Card> &KaibaHand, vector<Card> &KaibaDeck);
void DrawForKaiba(vector<Card> &KaibaHand, vector<Card> &KaibaDeck);
void KaibaMainPhase(void (*)(vector< vector<Card> > &Field, vector<Card> &KaibaGraveyard,
vector<Card> &YugiGraveyard), vector<Card> &KaibaHand, vector<Card> &KaibaDeck, vector<
vector<Card> > &Field, vector<Card> &YugiGraveyard, vector<Card> &KaibaGraveyard);


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


void KaibaMainPhase(void (*)(vector< vector<Card> > &Field, vector<Card> &KaibaGraveyard,
vector<Card> &YugiGraveyard), vector<Card> &KaibaHand, vector<Card> &KaibaDeck,
vector<vector<Card> > &Field, vector<Card> &YugiGraveyard, vector<Card> &KaibaGraveyard);


void HEAVYSTORM(vector<Card> &KaibaHand, vector<Card> &KaibaDeck, vector< vector<Card> > &Field,
vector<Card> &KaibaGraveyard, vector<Card> &YugiGraveyard)
{
cout<<"This card destroys ALL magic and traps cards on the field!!"<<endl;
    for (int i=0; i<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<Card> &KaibaHand, vector<Card> &KaibaDeck, vector< vector<Card> > &Field,
vector<Card> &KaibaGraveyard, vector<Card> &YugiGraveyard)
{
DrawForKaiba(KaibaHand, KaibaDeck);
}


int main()
{

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


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


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

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

    }
}

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

    }
}

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

void YugiGraveyardFunction(vector<Card> &YugiGraveyard)
{
        cout<<endl<<"Yugi's graveyard contains: "<<endl;
        for (YG=YugiGraveyard.begin(); YG<YugiGraveyard.end(); YG++)
        {
            cout<<YG->GetName()<<endl; //SAME AS (*gt).GetName
        }
        cout<<"\n";
类卡
{
公众:
字符串GetName(){return Name;}
void SetName(const string&SetName){Name=SetName;}
void SetType(const string&SetType){Type=SetType;}
私人:
字符串名;
字符串类型;
};
向量<向量>场(4,向量(5));
矢量Kaibhand;
向量::迭代器KH;
矢量手;
向量::迭代器YH;
矢量KaibaGraveyard;
向量::迭代器KG;
向量场;
向量::迭代器YG;
无效Kaibabegining(vector&KaibaHand,vector&KaibaDeck);
void DrawForKaiba(vector&Kaibhand、vector&KaibaDeck);
void KaibaMainPhase(void(*)(向量<向量>&场、向量和KaibaGraveyard,
vector&YugiGraveyard),vector&Kaibhand,vector&KaibaDeck,vector<
向量>&字段、向量和YugiGraveyard、向量和KaibaGraveyard);
无效场函数(向量<向量>&场);
无效Kaibhand函数(向量和Kaibhand);
无效KaibaGraveyardFunction(向量和KaibaGraveyard);
无效YUGRAVEYARDFUNCTION(矢量和YUGRAVEYARD);
void KaibaSummon(向量字段,向量和KaibaHand,int HandNumber,int
MonstCount);
void YugiSummon(vector字段,vector&YugiHand,int HandNumber,int
MonstCount);
void KaibaDiscard(int HandNumber、vector和KaibaHand、vector和KaibaGraveyard);
void YugiDiscard(int HandNumber、vector和YugiHand、vector和yugiraveyard);
void KaibaMainPhase(void(*)(向量<向量>&场、向量和KaibaGraveyard,
vector&YugiGraveyard)、vector&KaibaHand、vector&KaibaDeck、,
向量和场、向量和YugiGraveyard、向量和KaibaGraveyard);
无效重态(向量和Kaibhand,向量和KaibaDeck,向量和字段,
vector&KaibaGraveyard、vector&YugiGraveyard)
{
cout在这一行:

void KaibaMainPhase(void (*)(vector< vector<Card> > &Field, vector<Card> &KaibaGraveyard, vector<Card> &YugiGraveyard), vect....
稍后,在此代码中:

pFunct[0] = HEAVYSTORM;
[...]
KaibaMainPhase(pFunct, KaibaHand, Kaiba.....
您正在传递
pFunct
,它是由两个不同函数组成的数组。
数组与函数指针不同

但是,即使您通过了
pFunct[0]
,它也不会起作用。
pFunct
被声明为函数指针数组,其中每个函数都有5个参数:

/* Array of 2 fnct ptrs */ void (* pFunct[2])(
/* Param #1 */ vector<Card> &KaibaHand,
/* Param #2 */ vector<Card> &KaibaDeck,
/* Param #3 */ vector< vector<Card> > &Field,
/* Param #4 */ vector<Card> &KaibaGraveyard,
/* Param #5 */ vector<Card> &YugiGraveyard
);
/*两个fnct PTR的数组*/void(*pFunct[2])(
/*参数#1*/向量和Kaibhand,
/*参数2*/vector和KaibaDeck,
/*参数3*/vector字段,
/*参数4*/vector&KaibaGraveyard,
/*参数#5*/矢量和YugiGraveyard
);

但是函数<代码> KaBaMaEngult期望函数只使用<强> 3 < /强>参数。

您的错误信息应该指向特定的行。请指出哪一行。此外,考虑从问题中删除一些不相关的代码,并实际提出问题。我在这里没有发现任何问题。(提示:问题以问号结尾??)你知道什么是
typedef
以及如何使用它吗?我的哀悼,这段代码看起来无法穿透和维护。祝你好运。也许可以先把
vector和Field
这样的东西分解成它们自己的类,并在它们上面提供方法来完成
Field
对象应该做的事情?
void KaibaMainPhase(
    /* Function Pointer */ void (*)(
    /* Param #1         */ vector< vector<Card> > &Field,
    /* Param #2         */ vector<Card> &KaibaGraveyard,
    /* Param #3         */ vector<Card> &YugiGraveyard), /*other parameters to KaibaMainPhase*/....