Попробуйте этот код; если он не работает, ваш компилятор не поддерживает C ++ 11 или вы не указали правильный флаг компилятора, чтобы включить его.
#include <vector>
#include <iostream>
const std::vector<int> numbers = {1, 2, 3};
int main()
{
for(auto num: numbers)
{
std::cout << num;
}
}
Флаг компилятора может быть -std = c ++ 11 Но я не уверен насчет MSVC12
EDIT
У меня нет доступа к MSVC12. Можете ли вы попробовать это? Я думаю, что он не полностью поддерживает C ++ 11
Тест 1
#ifndef TESTCLASS_H
#define TESTCLASS_H
#include <QHash>
#include <QString>
QHash<QString, QString> const myHash = {{"Hi", "Hello"},
{"test", "Test"}};
class TestClass
{
public:
TestClass();
};
#endif // TESTCLASS_H
Тест 2
#ifndef TESTCLASS_H
#define TESTCLASS_H
#include <vector>
class TestClass
{
public:
TestClass();
const std::vector<int> numbers = {1, 2, 3};
};
#endif // TESTCLASS_H
Редактировать
Поскольку тест 1 работает, а тест 2 - нет, в поддержке MSVC12 C ++ 11 действительно есть что-то странное.
C ++ 11 утверждает, что вам следует разрешить инициализировать переменные-члены класса. в заголовочном файле, но кажется, что MSV C не поддерживает это. По крайней мере, для списков инициализаторов.
В вашем первоначальном вопросе QHa sh был постоянным, теперь я не уверен, чего вы хотели достичь с этим, но я вполне уверен, что вам либо нужно больше const или вы можете иметь QHa sh в качестве константы в имеющемся у вас файле X. cpp. Может быть, строки внутри QHa sh тоже должны быть константными?
Но это выходит за рамки этого вопроса, возможно, подумайте об этом (?)