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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,558
Записей в блоге: 17
#1

Шаблоны или ... (Maximum option context replay depth exceeded) - C++

18.06.2012, 01:16. Просмотров 524. Ответов 4
Метки нет (Все метки)

Код отсюдВа http://habrahabr.ru/post/38622/
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//------------------------------------------------------------
template <unsigned long t> struct Polynome  { static const unsigned long value = t&1 ? (t>>1)^0xedb88320 : t>>1;   };
template <unsigned long t, int i> struct For { static const unsigned long value = For<Polynome<t>::value,i-1 >::value; };
template <unsigned long t> struct For<t,0>  { static const unsigned long value = Polynome<t>::value;         };
template <unsigned long t> struct Hash    { static const unsigned long value = For<t,7>::value;           };
 
template<int r, int t> struct Table : Table<r+1, t-1>
 {
   Table() { values[t]= Hash<t>::value; }
 };
 
template<int r> struct Table<r,0>
 {
   int values[r+1];
   Table() { values[0]=Hash<0>::value; }
   int operator[](int i) {  return values[i];}
 };
 
typedef Table<0,255> CRC_TABLE;
 
class Crc32Hasher
 {
   CRC_TABLE crc_table;
public:
    unsigned long GetHashCode(const void* pObj, size_t length)
   {
    const char* buf = (const char*)pObj;
    unsigned long crc32=0xffffffff;
 
    for (size_t i=0; i<length; i++)
     crc32=crc_table[ (crc32^(*buf++))&0xff ]  ^(crc32>>8);
     crc32=crc32^0xffffffff;
     return crc32;
    }
 };
//--------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Ошибка:
Код
[BCC32 Error] main.cpp(36): E2489 Maximum option context replay depth exceeded; check for recursion
Вопрос можно ли это поправить как то в настройках?

(Пробывал на Visual код компилится хоть и затяжно, но так и должно быть)

Скрин:
Миниатюры
Шаблоны или ... (Maximum option context replay depth exceeded)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 01:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны или ... (Maximum option context replay depth exceeded) (C++):

Maximum recursion depth exceeded in comparison - Python
Решил проверить время сортировки на разных по длине списках. При 10 и 100 элементах работает нормально. А при 1000 выдает: maximum...

[Sympy] RecursionError: maximum recursion depth exceeded - Python
Второй час уже сижу, пытаюсь понять где я допустил ошибку... Может у кого-то это выйдет намного лучше чем у меня, если да, то буду...

При обработке строки выдаёт "maximum recursion depth exceeded" - Python
Программа работает нормально для небольшой строки. При большой длине строки выдает ошибку: maximum recursion depth exceeded in cmp ...

Глюк при UpLoad'e файлов: Permission denied или The maximum amount of time for a script to execute was exceeded. - C# ASP.NET
Подскажите, при каких ситуациях могут возникать ошибки Microsoft VBScript runtime error '800a0046' Permission denied или Active...

maximum user count exceeded - Firebird/InterBase
Здравствуйте, уважаемые коллеги. У меня возник такой вопрос. Я на основе firebird создал базу. В Delphi создал формы ведения данной...

Maximum execution time of 30 seconds exceeded - PHP
Fatal error: Maximum execution time of 30 seconds exceeded in c:\wamp\www\BD.php on line 35 что то связанное с времен им соединения ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,558
Записей в блоге: 17
18.06.2012, 23:10  [ТС] #2
Справка говорит:
Go Up to Compiler Errors And Warnings (C++) Index
If this error is triggered, it means that recursive template instantiation has gone too deep. Check for compile-time recursion in your program, and limit it to no more than 256 levels.
И действительно если изменить на
C++
1
typedef Table<0,253> CRC_TABLE;
То компилится.

Интересно какое же критическое количество рекурсий у VS что позволяет ей компилировать???

Но что меня удивило что g++ вообще код не проканал:
Код
****/Рабочий стол/Linux,Проекты /g++/meta- programming - temlate$ g++ main.cpp -o prog
main.cpp: In constructor ‘Table<r, t>::Table()’:
main.cpp:11: error: ‘values’ was not declared in this scope
Что то вроде того сказал и QtCreator....

Хотя всмотревшись в код я тоже не понимаю почему оно вообще должно пахать?
C++
1
2
3
4
template<int r, int t> struct Table : Table<r+1, t-1>
 {
   Table() { values[t]= Hash<t>::value; } // строка 11
 };
Откуда знать что такое values[t] ?
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
19.06.2012, 18:17 #3
Массив values объявлен только в одном месте, следовательно, объяснение может быть только одно - компилятор почему-то считает, что структура
C++
1
template<int r, int t> struct Table : Table<r+1, t-1>
наследует от структуры
C++
1
template<int r> struct Table<r,0>
Хотя, я не очень понимаю, почему. Синтаксис объявления последней структуры выглядит как-то странно... может, намеренно используются какие-то особенности vs?
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,558
Записей в блоге: 17
19.06.2012, 18:58  [ТС] #4
Дык на Builder тоже компилится при Table<0,253>

Добавлено через 15 минут
наследует от структуры
Ну а как же порядок... структура Table<r,0> объявлена позже...
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
19.06.2012, 19:10 #5
Сам не врубаюсь... но больше компилятору values брать просто неоткуда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 19:10
Привет! Вот еще темы с ответами:

Ошибка: Maximum call stack size exceeded - JavaScript
Решил поучиться js и решил написать простенькую прогу для решения квадратных уравнений(через дискриминант), но при попытке запустить Это...

Maximum execution time of 180 seconds exceeded - PHP
Всем привет! Сегодня без изменений в скрипте начал вылетать парсер с таймаутом Fatal error: Maximum execution time of 180 seconds...

Ошибка в joomla! Maximum execution time of 30 seconds exceeded - Joomla
Fatal error: Maximum execution time of 30 seconds exceeded in X:\home\localhost\www\project1\libraries\joomla\filesystem\folder.php on line...

Fatal error: Maximum execution time of 30 seconds exceeded - PHP
Привет всем! Пишу скрипт автоматической рассылки сообщений пользователям, недавно вступившим в группу Вконтакте. Алгоритм простой и с ним я...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.06.2012, 19:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru