.at() для вектора
От: _sky_ Россия  
Дата: 25.10.05 09:12
Оценка: -1
Здравствуйте.

Для G++ закон не писан что ли?

Есть вектор:
std::vector <int> field_max_length;

где-то вызываю:
field_max_length.at( field_counter );

В VS.net все просто на ура проходит, g++ как обычно номер выкидывает:
no matching function for call to 'vector<int,allocator<int> >::at (int &)'

Есть предложения? Я вообще у себя исключения использую для обработки ошибок, не хотелось бы везде лишние проверки на вхождение в диапазон проводить, так что ну очень не хочется использовать альтернативные способы получения значения вектора.
Re: .at() для вектора
От: crable США  
Дата: 25.10.05 09:24
Оценка:
Здравствуйте, _sky_, Вы писали:

__>Здравствуйте.


__>Для G++ закон не писан что ли?


__>Есть вектор:

__>std::vector <int> field_max_length;

__>где-то вызываю:

__>field_max_length.at( field_counter );

__>В VS.net все просто на ура проходит, g++ как обычно номер выкидывает:

__>no matching function for call to 'vector<int,allocator<int> >::at (int &)'

__>Есть предложения? Я вообще у себя исключения использую для обработки ошибок, не хотелось бы везде лишние проверки на вхождение в диапазон проводить, так что ну очень не хочется использовать альтернативные способы получения значения вектора.

У тебя просто старая версия gcc. Обнови его или поставь STLPort.
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re: .at() для вектора
От: jazzer Россия Skype: enerjazzer
Дата: 25.10.05 09:47
Оценка:
Здравствуйте, _sky_, Вы писали:

__>Для G++ закон не писан что ли?


Версия G++? Версия STL?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: .at() для вектора
От: yxiie Украина www.enkord.com
Дата: 25.10.05 10:23
Оценка:
Здравствуйте, crable, Вы писали:

C>У тебя просто старая версия gcc. Обнови его или поставь STLPort.


кстати как прикрутить его к MinGW 3.2.3 ?
Автор: yxiie
Дата: 31.07.05
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: .at() для вектора
От: crable США  
Дата: 25.10.05 10:30
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>Здравствуйте, crable, Вы писали:


C>>У тебя просто старая версия gcc. Обнови его или поставь STLPort.


Y>кстати как прикрутить его к MinGW 3.2.3 ?
Автор: yxiie
Дата: 31.07.05


С MinGW я не сталкивался, но судя по ошибкам, у тебя заголовки STLPort ищутся после стандартных. Естественно это приводит к проблемам. Разберись как его нужно правильно собирать.
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[4]: .at() для вектора
От: yxiie Украина www.enkord.com
Дата: 25.10.05 10:41
Оценка:
Здравствуйте, crable, Вы писали:

C>С MinGW я не сталкивался, но судя по ошибкам, у тебя заголовки STLPort ищутся после стандартных. Естественно это приводит к проблемам. Разберись как его нужно правильно собирать.


мда... а я почему-то ожидал от тебя толкового ответа... мог бы просто не отвечать.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: .at() для вектора
От: crable США  
Дата: 25.10.05 12:10
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>Здравствуйте, crable, Вы писали:


C>>С MinGW я не сталкивался, но судя по ошибкам, у тебя заголовки STLPort ищутся после стандартных. Естественно это приводит к проблемам. Разберись как его нужно правильно собирать.


Y>мда... а я почему-то ожидал от тебя толкового ответа... мог бы просто не отвечать.


Какая версия STLPort, gcc?
Посмотри определен ли _STLP_NO_EXCEPTION_SPEC.
Ты настройки какие-нибудь менял?
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[6]: .at() для вектора
От: yxiie Украина www.enkord.com
Дата: 25.10.05 13:03
Оценка:
Здравствуйте, crable, Вы писали:

Y>>мда... а я почему-то ожидал от тебя толкового ответа... мог бы просто не отвечать.


C>Какая версия STLPort, gcc?


там по ссылке ведь написано MinGW 3.2.3, STLport 4.6.2

C>Посмотри определен ли _STLP_NO_EXCEPTION_SPEC.


нет, определен просто
#define _STLP_NO_EXCEPTIONS 1

C>Ты настройки какие-нибудь менял?


да, но с дефолтными настройками вроде толку не было. эксепшны отключил, т.к. в проекте нельзя эксепшны юзать.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[7]: .at() для вектора
От: crable США  
Дата: 25.10.05 13:12
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>Здравствуйте, crable, Вы писали:


Y>>>мда... а я почему-то ожидал от тебя толкового ответа... мог бы просто не отвечать.


C>>Какая версия STLPort, gcc?


Y>там по ссылке ведь написано MinGW 3.2.3, STLport 4.6.2


C>>Посмотри определен ли _STLP_NO_EXCEPTION_SPEC.


Y>нет, определен просто

Y>#define _STLP_NO_EXCEPTIONS 1
Похоже ошибки как раз из-за этого.
C>>Ты настройки какие-нибудь менял?

Y>да, но с дефолтными настройками вроде толку не было. эксепшны отключил, т.к. в проекте нельзя эксепшны юзать.

Хмм... А если перехватывать исключения стандартной библиотеки? Насколько я знаю они выкидываются достаточно редко, посмотри стандарт.
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[8]: .at() для вектора
От: crable США  
Дата: 25.10.05 13:56
Оценка:
Здравствуйте, crable, Вы писали:

C>Здравствуйте, yxiie, Вы писали:


Y>>Здравствуйте, crable, Вы писали:


Y>>>>мда... а я почему-то ожидал от тебя толкового ответа... мог бы просто не отвечать.


C>>>Какая версия STLPort, gcc?


Y>>там по ссылке ведь написано MinGW 3.2.3, STLport 4.6.2


C>>>Посмотри определен ли _STLP_NO_EXCEPTION_SPEC.


Y>>нет, определен просто

Y>>#define _STLP_NO_EXCEPTIONS 1
C>Похоже ошибки как раз из-за этого.
C>>>Ты настройки какие-нибудь менял?

Y>>да, но с дефолтными настройками вроде толку не было. эксепшны отключил, т.к. в проекте нельзя эксепшны юзать.

C>Хмм... А если перехватывать исключения стандартной библиотеки? Насколько я знаю они выкидываются достаточно редко, посмотри стандарт.

Как вариант.

В stlport/stdexcept должны быть такие строки:
#if defined( __GNUC__)
#define _STLP_NOTHROW_INHERENTLY throw()
#endif


Попробуй заменить их на
//#if defined( __GNUC__)
#undef _STLP_NOTHROW_INHERENTLY
#define _STLP_NOTHROW_INHERENTLY throw()
//#endif


Это, конечно, грязный хак, но работать будет... наверно
The last good thing written in C was Franz Schubert's Symphony No. 9.
Re[8]: .at() для вектора
От: yxiie Украина www.enkord.com
Дата: 25.10.05 15:09
Оценка:
Здравствуйте, crable, Вы писали:

Y>>да, но с дефолтными настройками вроде толку не было. эксепшны отключил, т.к. в проекте нельзя эксепшны юзать.

C>Хмм... А если перехватывать исключения стандартной библиотеки? Насколько я знаю они выкидываются достаточно редко, посмотри стандарт.

программа компилируется с -fno-exceptions
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: .at() для вектора
От: _Winnie Россия C++.freerun
Дата: 25.10.05 16:11
Оценка:
Здравствуйте, _sky_, Вы писали:

__>Здравствуйте.


__>Для G++ закон не писан что ли?


__>Есть вектор:

__>std::vector <int> field_max_length;

__>где-то вызываю:

__>field_max_length.at( field_counter );

__>В VS.net все просто на ура проходит, g++ как обычно номер выкидывает:

__>no matching function for call to 'vector<int,allocator<int> >::at (int &)'

__>Есть предложения? Я вообще у себя исключения использую для обработки ошибок, не хотелось бы везде лишние проверки на вхождение в диапазон проводить, так что ну очень не хочется использовать альтернативные способы получения значения вектора.


Можно просто добавить в реализацию std::vector этот метод. Ничего сложного, пять строчек.
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.