在将一个函数的指针数组传递给另一个函数时遇到麻烦
Having trouble with passing array of pointers to functions to other functions
我得到这个错误:
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> &)"
下面是我的代码:
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";
这一行:
void KaibaMainPhase(void (*)(vector< vector<Card> > &Field, vector<Card> &KaibaGraveyard, vector<Card> &YugiGraveyard), vect....
您声明KaibaMainPhase
的第一个参数将是3个参数的函数。
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*/....
之后,在这段代码中:
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
);
但是函数KaibaMainPhase
期望一个只接受3个形参的函数
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将指针从一个void函数传递到另一个C++
- 如何从另一个文件继承私有成员变量和公共函数
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 如何在C++中将函数发送到另一个进程
- 如何在qt中从另一个类调用函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 将 N-arg 函数包装到另一个函数中
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- C++从另一个函数退出函数
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 在一个类中使用另一个类中的函数,而不在 c++ 中使用继承
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?