Главная » C++ » Почему нельзя инициализировать мой класс из списка инициализаторов, даже если он происходит от std :: list?
Почему нельзя инициализировать мой класс из списка инициализаторов, даже если он происходит от std :: list?
У меня есть следующий код.
#include <utility>
#include <list>
#include <iostream>
class Pair: public std::pair<unsigned int, unsigned int>{
Pair (unsigned int h, unsigned int l) : pair(h,l){};
};
class PairList: public std::list<Pair>{};int main(int argc, char** argv){
PairList pl = {{800,400},{800,400}};
}
Я скомпилировал его, используя MinGW g ++ из v4.6 с командной строкой g++ -std=c++0x Test.cpp -o test.exe
и получил ошибку: error: could not convert '{{800, 400}, {800, 400}}' from '<brace-enclosed initializer list>' to 'PairList'
Но если в main () я напишу list<pair<unsigned int,unsigned int>> pl = {{800,400},{800,400}};
все работает отлично.
WTF?
Реализуйте правильные конструкторы в ваших унаследованных классах (принимая std::initializer_list в качестве аргумента), конструкторы базового класса не могут использоваться автоматически.
Я рекомендую первый вариант, так как стандартные классы (за редким исключением) не предназначен для наследования.