Как включить функции C ++ 0x в Visual Studio? [Поддержка списков инициализаторов] - PullRequest
28 голосов
/ 25 февраля 2011

У меня был некоторый код, который я разработал в Ubuntu, и теперь я пытаюсь скомпилировать его в Windows 7 (MS VS 2010).

vector<float> tmp;
....
tmp = {3.0,4.5,9.4};

Это дает мне синтаксическую ошибку

error C2143: syntax error : missing ';' before '{'

Это потому, что Visual Studio не поддерживает эту функцию?или я должен включить какой-то переключатель в свойствах.У меня установлено свойство "Набор инструментов платформы" v100.

Спасибо.

Ответы [ 3 ]

33 голосов
/ 25 февраля 2011

Функции C ++ 0x включены по умолчанию в компиляторе Visual Studio 2010 C ++.Например, для использования лямбд, auto и т. Д. Не требуется никаких дополнительных ключей. Если вы получаете эту ошибку, это потому, что, по всей вероятности, она не поддерживается.

РЕДАКТИРОВАТЬ

На основе этой статьи MSDN списки инициализаторов не являются одной из 6 поддерживаемых функций в 2010

компилятор Visual C ++ в Visual Studio 2010 включает шесть основных функций языка C ++ 0x: лямбда-выражения, ключевое слово auto, ссылки на rvalue, static_assert, nullptr и decltype

16 голосов
/ 25 февраля 2011

Visual Studio 2010 не поддерживает списки инициализаторов. Посмотрите здесь для поддерживаемых функций C ++ 0x в Visual Studio 2010

Visual Studio 2012 также не поддерживает их. Вы можете найти функции C ++ 11, которые реализованы в Visual Studio 2012 / VS11 здесь и здесь .

Первая реализация списка инициализатора доступна в Компилятор Visual C ++ Ноябрь 2012 г. CTP .

Первый настоящий выпуск списков инициализаторов будет в Visual Studio 2013 .

3 голосов
/ 01 октября 2012

Даже если бы они были там, этот код не работал бы, потому что он присваивает список инициализатора, который еще не является вектором, существующему объекту с именем 'tmp'.Вы можете назначить векторы следующим образом:

vector<int> tmp = vector<int> {...}; // calls constructor, initializes then assigns

или

std::initializer_list<int> iniList = {1,2,3,4,5,6};

, но не

std::vector<int> tmp;
tmp = {...}; // calls assignment operator

Кстати: эта функция все еще отсутствует в VS2012.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...