我一直在尝试在类构造函数中使用std :: pair。每当我尝试声明一个对象或使用这个构造函数时,我都会得到错误"没有构造函数的实例与参数列表匹配。这是代码:
playAi::playAi(pair<int, int> p, int x, int y, int piece_pos[])
{
int xPos = x;
int yPos = y;
setup();
}
playAi::~playAi(void)
{
}
void playAi::setup()
{
pair<int, int> column1(10, 110);
pair<int, int> column2(130, 230);
pair<int, int> column3(250, 250);
int colX1 = 10;
int colY1 = 130;
//initializing the pair
playAi temp[] = {
**playAi(column1, colX1, colY1, piece_pos[0])**,
};
}
我无法想到任何其他方式我可以声明对象而不是我正在做的事情。最后一个条目&#34; piece_pos []&#34;是从另一个类继承的。我是否需要使用完整的范围名称?谢谢你的帮助。
答案 0 :(得分:1)
问题不在于 - 在这方面你的代码很好(尽管你可以通过使用make_pair
模板函数来避免创建一个临时代码,这只是一个优化,而不是修复)。
问题是,当您尝试将piece_pos
传递给它时,构造函数希望看到指向piece_pos
或piece_pos[0]
数组的指针。你不能创建一个数组&#34; inline&#34;在这样的函数调用中:
piece_pos tmp[1];
...
playAi(column1, colX1, colY1, tmp)
以下是使用make_pair
重写此代码的方法:
playAi(make_pair(10, 110), colX1, colY1, tmp)