Не удается скомпилировать с дампом памяти для некоторых файлов - PullRequest
0 голосов
/ 30 августа 2010

Я использую этот файл Debug.h, который я включаю в качестве последнего #include из файлов, где я хочу отлаживать для утечек памяти.Затем с помощью _CrtDumpMemoryLeaks ();чтобы вывести его на мой вывод .. Это прекрасно работает для большинства файлов, но когда я включаю его в некоторые файлы, я получаю ошибку ниже.Похоже, что это имеет отношение к boost :: unorderer_map <> .. но я могу включить свой Debug.h в файлы .h, где я определяю и использую unordered_map <> без каких-либо ошибок ... и я получаю ошибку, когда явключите его в файлы .h, где я даже не использую его, а ..

#ifndef DEBUG_H
#define DEBUG_H

#ifdef _DEBUG
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif

#endif

1> d: \ uni \ ict312 \ labproject \ labproject \ inc \ boost \ unordered \ detail \ fwd.hpp (351): ошибка C2059: синтаксическая ошибка: '(' 1> d: \ uni \ ict312 \ labproject \ labproject \ inc \ boost \ unordered \ detail \ fwd.hpp (350): при компиляции функции-члена шаблона класса 'void boost ::unordered_detail :: hash_buffered_functions :: construct (bool, const H &, const P &) '1> с 1> [1> H = boost :: hash, 1> P = std :: equal_to 1>] 1> d: \uni \ ict312 \ labproject \ labproject \ inc \ boost \ unordered \ detail \ fwd.hpp (432): см. ссылку на создание экземпляра шаблона класса 'boost :: unordered_detail :: hash_buffered_functions', компилируемого 1> с 1> [1> H =boost :: hash, 1> P = std :: equal_to 1>] 1> d: \ uni \ ict312 \ labproject \ labproject \ inc \ boost \ unordered \ detail \ fwd.hpp (572): см. ссылкуперейти к созданию экземпляра шаблона класса 'boost :: unordered_detail :: hash_table', компилируемого 1> с 1> [1> T = boost :: unordered_detail :: map, std :: equal_to, std :: allocator >> 1>] 1>d: \ uni \ ict312 \ labproject \ labproject \ inc \ boost \ unordered \ unordered_map.hpp (98): см. ссылку на создание экземпляра шаблона класса 'boost :: unordered_detail :: hash_unique_table', скомпилированного 1> с 1> [1> T= boost :: unordered_detail :: map, std :: equal_to, std :: allocator >> 1>] 1> d: \ uni \ ict312 \ labproject \ labproject \ inc \ collisiondetector.h (15): см. ссылку на шаблон классаэкземпляр 'boost :: unordered_map' компилируется 1> с 1> [1> K = без знака int, 1> T = PhysicsObject 1>]

1 Ответ

1 голос
/ 30 августа 2010

Вы имеете в виду, что вы включаете Debug.h после всех других строк #include и по-прежнему получаете ошибки компиляции в заголовках boost? Это может произойти, когда компилятор пытается создать экземпляр класса шаблона, только в этот момент код шаблона действительно скомпилирован. Единственный способ предотвратить это - вернуться к исходному новому оператору во фрагменте кода, который вызывает эту ошибку. Нет возможности скомпилировать буст с переопределенным новым оператором.

Другой способ - переместить строки кода, которые не скомпилированы, в отдельный файл .cpp без нового переопределения.

...