Следующий код компилирует ОК с помощью XCode 5.0, но не Visual Studio 2013.Как инициализировать переменную-член вектора в определении класса?
#include <vector>
class VectorInit
{
private:
std::vector<int> m_vector{1, 2, 3}; // fails to compile using VS 2013
};
int main()
{
std::vector<int> vector{1, 2, 3};
VectorInit vectorInit;
return 0;
}
Это ошибка, что отчеты Visual Studio:
Error 1 error C2664: 'std::vector<int,std::allocator<_Ty>>::vector(std::initializer_list<int>,const std::allocator<_Ty> &)' : cannot convert argument 3 from 'int' to 'const std::allocator<_Ty> &' c:\visual studio 2013\projects\vector-init\main.cpp 6 1 vector-init
мне не удалось найти пример того, как для инициализации такого вектора в определении класса.
Какой именно компилятор?
Если синтаксис недействителен, является единственным вариантом для инициализации m_vector в списке инициализации конструктора?
visual 2013 еще не в порядке с нестационарным членом в инициализации класса в каждом случае, агрегат не работает, только видя, например, конструктор копирования. initializer_list ctor тоже. – galop1n
@ galop1n Извините, я не совсем понимаю ваш комментарий. Пожалуйста, уточните. – ksl
в инициализации члена класса - это функция C++ 11, дебютирующая в VS2013. Но когда член является агрегатом, компилятор работает неправильно и вместо этого пытается использовать конструктор копирования. Он игнорирует слишком конструкторы, которые берут список инициализаторов и пытаются сопоставить параметры только с регулярными конструкторами. – galop1n