Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6312
Последний выпуск: 19.06.2015

Поиск источника ошибки в шаблоне

8.2K
26 августа 2013 года
ReSearcher
19 / / 12.11.2005
Добрый день!

С++ Builder XE2 не показывает настоящую причину ошибки в шаблоне. Тыкает в сам шаблон, а из какого места кода происходит создание экземпляра шаблона - молчит. Если кода много - искать долго.

Код:
//-----------------------------------
template<typename T>
struct A
{
   T fn() { return( 1 ); } /*ошибка из-за второй строки ::tmain(...)*/
};

int _tmain(int argc, _TCHAR* argv[])
{
      A<int>().fn(); /*ok*/
      A<int*>().fn(); /*ошибка здесь на самом деле, но Builder молчит*/

      return 0;
}
//-----------------------------------

Можно как-нибудь заставить Builder говорить точнее, откуда экземпляр шаблон был создан?

Спасибо.
445
26 августа 2013 года
Meander
487 / / 04.09.2011
Никак. Надо сразу правильно писать шаблон. В приведенном примере компилятор правильно делает, что тыкает на шаблон, т.к. его инстанцирование правильно а функция член - нет. Тип возвращаемого значения, должен при любых обстоятельствах совпадать с декларируемым типом возвращаемого значения.
Например:

 
Код:
T fn() { return( (T)1 ); }
или кастами.
8.2K
26 августа 2013 года
ReSearcher
19 / / 12.11.2005
Спасибо.

Указывает на шаблон то он правильно.
Только вот ситуация.
В коде разбросана сотня созданий экземпляров шаблонов.
Только один из них неправильный.
Как его найти? Если builder указывает не следствие, а не на причину.

Чуть уточню.
Извиняюсь, что не сразу.
Иерархию разбора исходника видно в 'Full parser context' сообщения об ошибке, но так только 6 строк в основном прогулка по *.h, ссылок на *.cpp нет.
Можно ли увеличить количество выводимых сообщений, чтобы дойти до источника ошибки?

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог