有没有办法使用std :: pair<>在类构造函数中

时间:2014-04-30 01:02:20

标签: c++ c++11 std-pair

我一直在尝试在类构造函数中使用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;是从另一个类继承的。我是否需要使用完整的范围名称?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

问题不在于 - 在这方面你的代码很好(尽管你可以通过使用make_pair模板函数来避免创建一个临时代码,这只是一个优化,而不是修复)。

问题是,当您尝试将piece_pos传递给它时,构造函数希望看到指向piece_pospiece_pos[0]数组的指针。你不能创建一个数组&#34; inline&#34;在这样的函数调用中:

piece_pos tmp[1];
...
playAi(column1, colX1, colY1, tmp)

以下是使用make_pair重写此代码的方法:

playAi(make_pair(10, 110), colX1, colY1, tmp)