Форум программистов, компьютерный форум CyberForum.ru

Проблемы с контейнером - C++

Восстановить пароль Регистрация
 
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
09.03.2012, 16:30     Проблемы с контейнером #1
имеются следующие типы:
C++
1
2
typedef int (*CLI_Function ) ( const std::vector <const std::string> arguments, void * data );
typedef std::map <std::string,CLI_Function> FunctionMap;
то есть здесь иммется ввиду набор пар указатель на функцию - строка

И следующий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
 
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
 
/* To print out the prompt you need to use a function.  This could be
made to do something special, but I opt to just have a static prompt.
*/
 
typedef int (*CLI_Function ) ( const std::vector <const std::string> arguments, void * data );
typedef std::map <std::string,CLI_Function> FunctionMap;
 
using namespace std;
int main( void )
{
    FunctionMap fm;
 
    FunctionMap::iterator it = fm.begin();
    it->second;
}
побуждает вот такую ошибку компилятора:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
prompt$ g++ main.cpp -o main
In file included from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/i486-slackware-linux/bits/c++allocator.h:34:0,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/allocator.h:48,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/string:43,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/locale_classes.h:42,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/ios_base.h:43,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ios:43,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ostream:40,
                 from /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/iostream:40,
                 from main.cpp:4:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h: In instantiation of ‘__gnu_cxx::new_allocator<const std::basic_string<char> >’:
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/allocator.h:87:5:   instantiated from ‘std::allocator<const std::basic_string<char> >/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/stl_vector.h:71:60:   instantiated from ‘std::_Vector_base<const std::basic_string<char>, std::allocator<const std::basic_string<char> > >/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/stl_vector.h:171:5:   instantiated from ‘std::vector<const std::basic_string<char> >’
main.cpp:24:4:   instantiated from here
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h:79:7: error: ‘const _Tp* __gnu_cxx::new_allocator<_Tp>::address(const _Tp&) const [with _Tp = const std::basic_string<char>, const _Tp* = const std::basic_string<char>*, const _Tp& = const std::basic_string<char>&]’ cannot be overloaded
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/ext/new_allocator.h:76:7: error: with ‘_Tp* __gnu_cxx::new_allocator<_Tp>::address(_Tp&) const [with _Tp = const std::basic_string<char>, _Tp* = const std::basic_string<char>*, _Tp& = const std::basic_string<char>&]
кто-нибудь сталкивался с подобным?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2012, 16:30     Проблемы с контейнером
Посмотрите здесь:

C++ Проблемы с gets
не работают методы в классе с контейнером map C++
проблемы c codeBlocks 10.05 C++
C++ проблемы с ООП
Проблемы с C++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
09.03.2012, 16:44     Проблемы с контейнером #2
-MefistofeL-,
http://codepad.org/aBQv7bGN компилируется, но учтите, что строка it->second невалидна, так как вы ничего не добавили в мап и it равен fm.end()
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
09.03.2012, 16:52  [ТС]     Проблемы с контейнером #3
Да понятно, что она будет компилироваться без последней строчки. Смотрите внимательнее, ошибка компилятора, а не runtime. Я просто перенес ее в маленький тестовый код, чтобы легче было оценить ситуацию))

Добавлено через 4 минуты
Убедительно прошу, прежде чем писать ответ до конца вникнете в проблему, иначе лучше не отвечать вообще...

Добавлено через 2 минуты
хм... проблема пропадает, если убрать const из списка шаблонов... хотелось бы однако узнать, почему?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
09.03.2012, 17:04     Проблемы с контейнером #4
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
Убедительно прошу, прежде чем писать ответ до конца вникнете в проблему, иначе лучше не отвечать вообще...
_ок___
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
09.03.2012, 21:58     Проблемы с контейнером #5
хм... проблема пропадает, если убрать const из списка шаблонов... хотелось бы однако узнать, почему?
Может потому что вы пытаетесь изменить вектор в теле ф-ции?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
09.03.2012, 22:02     Проблемы с контейнером #6
http://codepad.org/4JvVd3XE ошибка не пропадает
название хедера даже safe_iterator.h
видимо не проходит статическую проверку Гнушным компилем
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
09.03.2012, 22:07     Проблемы с контейнером #7
В RAD 2009 канает код
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
09.03.2012, 22:16     Проблемы с контейнером #8
ну логично компилятор то другой
Vs тоже хавает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2012, 22:34     Проблемы с контейнером
Еще ссылки по теме:

задача с контейнером C++
Ошибка в роботе с контейнером: set iterator not incrementable C++
C++ Операция с контейнером vector

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
09.03.2012, 22:34  [ТС]     Проблемы с контейнером #9
Все там работает. Возможно, компилятор будет ругаться на разименование итератора, указывающего на конец. Это уж давольно жесткий он должен быть))
Yandex
Объявления
09.03.2012, 22:34     Проблемы с контейнером
Ответ Создать тему
Опции темы

Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru