0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
||||||
1 | ||||||
Как задать значения map при объявлении?22.07.2015, 13:39. Показов 4444. Ответов 10
Метки нет (Все метки)
Всем добрый день!
Имею следующие объявления.
В принципе, NatureMap можно даже объявить const, поскольку этот словарь таковым и является. При расположении кода, как сейчас, я получаю сообщения компилятора типа Если бы я умел проинициализировать NatureMap в defs.h, это решило бы проблему. Но код NatureMap["\"I\""]=1e-12; в заголовках не проходит. А так - я вообще не понимаю, почему возникает конфликт объявлений. То есть, догадываюсь. Видимо, при линковке. Но как избежать этого? Гы, смайлики получились... но, в общем, к месту
0
|
22.07.2015, 13:39 | |
Ответы с готовыми решениями:
10
Как при объявлении переменной типа Sprite сразу задать нужный спрайт Как присвоить начальные значения массиву при объявлении и вывести элементы массива на экран? Присвоение переменной значения при ее объявлении Можно ли полям структуры при их объявлении присвоить значения |
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|||||||||||
22.07.2015, 14:33 | 3 | ||||||||||
Сообщение было отмечено rotciv как решение
Решение
С++11
1
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
|
22.07.2015, 17:34 [ТС] | 4 |
DrOffset, большое спасибо. Вариант С++98 скомпилировался.
А что нужно сделать, чтобы работала поддержка С++11 на линуксе?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
22.07.2015, 18:07 | 5 |
Компилятор достаточной версии и ключ -std=c++11 (в идеале лучше GCC 4.8 и выше). В более старых версиях может работать -std=c++0x, но возможности не все поддерживаются.
0
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
|
23.07.2015, 10:10 [ТС] | 6 |
Я пользуюсь g++, хотя он говорит, что он - gcc, хотя на самом деле немного разные.
~/Simulation_TC/wsf_test/OO >> g++ --version g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ~/Simulation_TC/wsf_test/OO >> gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ~/Simulation_TC/wsf_test/OO >> which g++ /usr/bin/g++ ~/Simulation_TC/wsf_test/OO >> which gcc /usr/bin/gcc ~/Simulation_TC/wsf_test/OO >> ls -l /usr/bin/g++ -rwxr-xr-x. 4 root root 271368 Sep 1 2014 /usr/bin/g++ ~/Simulation_TC/wsf_test/OO >> ls -l /usr/bin/gcc -rwxr-xr-x. 2 root root 268256 Sep 1 2014 /usr/bin/gcc Ключ -std=c++0x можно попробовать. Он сам в логе про него говорил, когда я пытался вариант С++11 компилировать.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
23.07.2015, 12:04 | 8 |
Ликбез: GCC - это GNU Compiler Collection. Сборник из нескольких компиляторов под общим названием. Непосредственно бинарник gcc сам умеет определять (по расширению) файл на каком языке ему подсунули и вызывать нужный компилятор.
g++ - это компилятор и линкер для С++ в одном флаконе из состава GCC. PS. на деле там под капотом все это распадается еще на несколько отдельных бинарников: компилятор, транслятор, линкер, препроцессор, ассемблер. Но это уже несущественные детали. Добавлено через 2 минуты Это достаточно старая версия. С++11 там не ждать (разве что tr1 можно попробовать заюзать, но это только библиотека). В общем-то там даже С++03 с багами. Добавлено через 1 минуту Хотя я не прав. Кое-что все-таки есть: https://gcc.gnu.org/gcc-4.4/cxx0x_status.html.
1
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
||||||
23.07.2015, 16:58 [ТС] | 9 | |||||
Я пока продолжаю с вариантом С++98.
Опять не понимаю. Строка в исходнике...
PsfFileReader.cpp: In constructor ‘PsfFileReader::PsfFileReader(std::string)’: PsfFileReader.cpp:71: error: passing ‘const std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std:air<const std::basic_string<char, > >std::char_traits<char>, std::allocator<char> >, double> > >’ as ‘this’ > >argument of ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const > >_Key&) [with _Key = std::basic_string<char, std::char_traits<char>, > >std::allocator<char> >, _Tp = double, _Compare = > >std::less<std::basic_string<char, std::char_traits<char>, > >std::allocator<char> > >, _Alloc = std::allocator<std:air<const > >std::basic_string<char, std::char_traits<char>, std::allocator<char> >, > >double> >]’ discards qualifiers Что бы это значило? Я пытаюсь значение double присвоить полю double.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
23.07.2015, 17:07 | 10 |
rotciv, NatureMap const, оператор [] не может использоваться для константной мапы, ибо может изменить саму мапу. Либо делайте NatureMap не const, либо юзайте map.find, который вернет итератор и который надо будет проверить перед тем как разыменовать.
2
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
|
|
23.07.2015, 17:29 [ТС] | 11 |
ForEveR, точно. Убрал const, заработало. Спасибо!
0
|
23.07.2015, 17:29 | |
23.07.2015, 17:29 | |
Помогаю со студенческими работами здесь
11
Как задать двумерный массив, чтобы значения можно было писать при запуске программы? Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? Как задать зависимость значения ячейки от даты при заданном значении ячейки функцией (сегодня) Как инициализировать массив нулями при объявлении? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |