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

Is there a way to use a std::pair<> in a class constructor

本文关键字:air lt gt std 构造函数 有没有      更新时间:2023-10-16

我一直在尝试在类构造函数中使用std::对。每当我试图声明一个对象或使用这个构造函数时,我都会得到一个错误,即"没有构造函数的实例与参数列表匹配

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])**,
    };
}

除了我正在做的事情,我想不出还有什么其他方式可以声明这个对象。最后一个条目"piece_pos[]"是从另一个类继承的。我需要使用完整的作用域名称吗?谢谢你的帮助。

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

问题是,当你试图将piece_pos[0]传递给构造函数时,构造函数希望看到指向piece_pos的指针或piece_pos的数组

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

以下是如何使用make_pair:重写此代码

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