Я использую VS 6 sp5.
В связи с чем может возникать такая ошибка?
У меня указанная ошибка C1063 возникает при попытке компилировать код использующий мой шаблоный класс map_p.
Этот шаблон был создан для реализации ассоциативного списока следующего вида: пара значений типов Ty1 и Ty2 ассоциируется со значением типа Ty3
При этом: Первое значение из пары уникальный ключ.
Второе значение из пары создает подмножества значений (и соответственно не уникально). Будем называть его родитель.
От класса требуется следующее: Возможность найти значение по ключу.
Возможность найти родителя по ключу.
Возможность перебирать значения от первого до последнего.
Возможность перебирать значения с заданным родителем от первого до последнего.
Возможность вставлять и удалять значения, разумеется.
Список сортированный и порядок значений в списке задается в первую очередь предикатом Pr2 определяющим порядок значений типа Ty2, во вторую очередь предикатом Pr3 определяющим порядок значений типа Ty3 и в последнюю очередь предикатом Pr1 определяющим порядок значений типа Ty1.
Я реализовал свой шаблон на базе шаблонов STL map и set
здесь в values хранятся тройки ключ, родитель, значение
keys связывает ключ и итератор указывающий на соответствующую тройку в values
parents связывает родителя и пару итераторов указывающих на первую и последнюю тройку с соответствующим значением родителя в values
на небольших тестовых примерах шаблон работает, правда постоянно выдаеются предупреждения C4786 о том, что identifier was truncated to '255' characters in the browser information
В реальной задаче компиляция приводит к ошибке C1063.
Я предполагаю, что проблема связана с длинной получающихся идентификаторов в первую очередь итератора, в связи с чем возникает два вопроса:
Можно ли как-то обойти проблему не меняя реализации шаблона?
Если менять реализацию всё-таки придется, то каким образом лучше это сделать, что бы ещё раз не наступить на те же грабли?
Если есть необходимость я могу привести полный код реализации данного шаблона.
Re: Шаблоны и fatal error C1063 (compiler stack overflow)
Здравствуйте, vselin, Вы писали:
v> Я использую VS 6 sp5. v> В связи с чем может возникать такая ошибка?
Например, в связи с бесконечной рекурсией при инстанциировании шаблона.
v> на небольших тестовых примерах шаблон работает, правда постоянно выдаеются v> предупреждения C4786 о том, что identifier was truncated to '255' characters <...> v> Я предполагаю, что проблема связана с длинной получающихся идентификаторов
Очень маловероятно.
v> Если есть необходимость я могу привести полный код реализации данного шаблона.
Есть необходимость посмотреть минимальный код. Т.е. обрезай свой шаблон и код,
его использующий пока он не станет достаточно маленьким, но так, чтобы проблема
все еще воспроизводилась.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: Шаблоны и fatal error C1063 (compiler stack overflow)
Здравствуйте, Павел Кузнецов, Вы писали:
v>> В связи с чем может возникать такая ошибка? ПК>Например, в связи с бесконечной рекурсией при инстанциировании шаблона.
Собственно это единственное, что и мне пришло в голову.
Наличие отсутствия такой ошибки я проверил до того как обращаться к общественности.
Я уже совсем было отчаялся что-либо понять в происходящем, но совершенно случайно обнаружил, что эта ошибка исчезает стоит только отключить в Project settings -> C/C++ -> General опцию "generate browse info" которой соответствует ключик /FR
В общем, проблема не то что бы решена, но найдены пути её устранения. Спасибо всем, кто откликнулся.
Конечно, если кто-нибудь сможет объяснить причину возникновения такой ошибки и как она связана с browse info буду весьма рад услышать это объяснение.
К сожалению, создать код моделирующий возникновение ошибки оказалось не таким простым делом. Если есть интересующиеся я попробую всё-таки сделать что-то приемлимого размера для постинга здесь, но немного позднее, после того как наверстаю время упущенное в борьбе с этой злосчастной C1063.
Паралельно ещё вопрос:
я не смог найти толкового описания конструкции #pragma warning
Во всяком случае то, что я по этому поводу прочитал в MSDN не дает объяснения, почему строчка
#pragma warning (disable: 4786)
ничерта не отключает это самое предупреждение C4786 коих компилятор мне выдает более 300 штук. Что довольно неудобно.
А отключить вывод этого предупреждения мне удается только отключив вывод всех предупреждений. Что в общем-то тоже не есть хорошо.
Может кто-нибудь знает какие-нибудь тонкости с отключением выборочных предупреждений в VC6?
Re[3]: Шаблоны и fatal error C1063 (compiler stack overflow)
От:
Аноним
Дата:
24.11.03 20:00
Оценка:
Здравствуйте, Richard Redford, Вы писали:
RR>Паралельно ещё вопрос: RR>я не смог найти толкового описания конструкции #pragma warning RR>Во всяком случае то, что я по этому поводу прочитал в MSDN не дает объяснения, почему строчка RR>
RR>#pragma warning (disable: 4786)
RR>
RR>ничерта не отключает это самое предупреждение C4786 коих компилятор мне выдает более 300 штук. Что довольно неудобно. RR>А отключить вывод этого предупреждения мне удается только отключив вывод всех предупреждений. Что в общем-то тоже не есть хорошо.
RR>Может кто-нибудь знает какие-нибудь тонкости с отключением выборочных предупреждений в VC6?
Попытайтесь поставить указанную pragma до первых строчек кода translation unit. Наример, до всех #include директив в cpp файле.
--
Михаил Кочетков.
Re[4]: Шаблоны и fatal error C1063 (compiler stack overflow)
Здравствуйте, Аноним, Вы писали: А>Попытайтесь поставить указанную pragma до первых строчек кода translation unit. Наример, до всех #include директив в cpp файле.
Собственно так и стоит.
Сразу после #pragma once
Re[5]: Шаблоны и fatal error C1063 (compiler stack overflow)
От:
Аноним
Дата:
24.11.03 20:23
Оценка:
Здравствуйте, Richard Redford, Вы писали:
RR>Здравствуйте, Аноним, Вы писали: А>>Попытайтесь поставить указанную pragma до первых строчек кода translation unit. Наример, до всех #include директив в cpp файле. RR>Собственно так и стоит. RR>Сразу после #pragma once
Боюсь, что Вы совершенно невнимательно читали. #pragma once, насколько я понимаю, ставится в заголовочных файлах, а я говорил о единице компиляции -- translation unit. Чтобы гарантировать, что запрещающая предупреждения pragma стоит до первых строчек кода, Вам необходимо поместить ее именно в исходном, cpp файле. Иначе Вам придется внимательно следить, что Ваш заголовочный файл с этой pragma всегда включается первым.
--
Михаил Кочетков.
Re[6]: Шаблоны и fatal error C1063 (compiler stack overflow)