如果這是一個常見問題,我很抱歉,我不知道如何搜索它,所以我認為最好問一下。
我想在 C 中定義一個std::arrayof std::pairs 來存盤 SFML sf::IntRects。我搞砸了大約 10 分鐘,最后意識到它可以編譯:
std::array<std::pair<sf::IntRect, sf::IntRect>, 1> aliens{
{
{sf::IntRect{2,3,1,2}, sf::IntRect{4,1,3,2}}
}
};
為什么我需要一對額外的花括號?當我帶走它們時:
std::array<std::pair<sf::IntRect, sf::IntRect>, 1> aliens{
{sf::IntRect{2,3,1,2}, sf::IntRect{4,1,3,2}}
};
我收到一個錯誤 No suitable user-defined conversion from "sf::IntRect" to "std::pair<sf::IntRect,sf::IntRect>" exists
這些花括號在做什么?我無法想象他們需要什么。
uj5u.com熱心網友回復:
std::array是一個圍繞內置 C 風格陣列的包裝模板。你可能會認為它是這樣的
template <typename T, std::size_t N>
class array {
T arr[N];
...
};
雙方std::array并內置C陣列都是集合型別。您可以使用聚合初始化語法對其進行初始化。它會是這樣的
std::array<T, N> array = {{ t0, t1, t2 }};
外部{}用于std::array自身,而內部{}用于包裝的內置 C 樣式陣列。
看看你的例子
std::array<std::pair<sf::IntRect, sf::IntRect>, 1> aliens{
{sf::IntRect{2,3,1,2}, sf::IntRect{4,1,3,2}}
};
如下重新格式化時,錯誤更加明顯。
std::array<std::pair<sf::IntRect, sf::IntRect>, 1> aliens{{
sf::IntRect{2,3,1,2},
sf::IntRect{4,1,3,2}
}};
您正在嘗試使用單個sf::IntRect物件初始化一對。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330953.html
