Visual Studio 2010 C ++ неуклюжее поведение компоновщика - PullRequest
0 голосов
/ 05 июня 2011

Работая над большим проектом, я столкнулся с этой проблемой: время от времени компоновщик отказывается «видеть» реализацию класса, выбрасывая исключения «символ не найден», где бы ни находились методы этого конкретного класса (Board).

Некоторые «технические» данные:

  • Я однажды использую #pragma в своих файлах .cpp.Я знаю, что в конце концов они ничего не делают (или не должны делать), поскольку файлы .cpp не включены в другие, но я разработал эту дурную привычку писать это в верхней части каждого файла кода, который я создаю.

  • Класс реализует ВСЕ методы, объявленные в его файле .h

  • Класс включает другие заголовки проекта, но включены те же самые заголовкиво многих файлах этот класс является ЕДИНСТВЕННЫМ, у которого есть проблемы с компиляцией.

  • Проблемы начали появляться вскоре после того, как я написал шаблонный класс, который мой класс включает и использует, но,как упоминалось выше, другие классы не имеют проблем с ним (поэтому я не могу сказать, действительно ли шаблон связан с проблемой).

и самая странная часть:

  • При сбое компоновщика с исключением «символ не найден» (он делает это только НЕКОТОРЫЕ разы), если я переключу директиву #pragma Once в файле класса .cpp, следующая компиляция работает.Это означает, что иногда мне нужно комментировать «#pragma Once», чтобы получить успешную компиляцию, иногда мне нужно раскомментировать ее.

Если вам нужна дополнительная информация, такая как .h и.cpp файлы класса, я напишу это как можно скорее.

Спасибо за ваше время!

РЕДАКТИРОВАТЬ:

Дополнительная информация:

  • Когда проблема впервые появилась, я попытался прокомментировать как можно больше методов и полей класса, пытаясь изолировать проблему.В некоторых случаях удаление ссылки между классом и шаблоном приводило к хорошей компиляции, но в дальнейшем это не имело значения.Добавление экземпляров класса в разные части моего проекта (файлы / пространства имен / и т. Д.) Также не имело никакого значения.

  • Visual Studio установлена ​​на C: \, проект находится на D: \, оба раздела - NTFS.

  • Это единственныйпроект, с которым у меня проблемы, я создал, скомпилировал и успешно выполнил множество других проектов до и после того, как возникла проблема с этим же стилем программирования.

  • Я пытался пересобрать весь проекти очистка файлов .obj вручную, когда проблема возникает, и это не имеет никакого значения.

1 Ответ

0 голосов
/ 05 июня 2011

Эта ссылка http://www.cplusplus.com/forum/beginner/7877/ предоставляет интересное обсуждение для различных стилей защиты.
Это наводит на мысль о случаях, когда #pragma однажды не работает, может быть, это может вам помочь.

Моя плата состоит в том, чтобы один раз избежать #pragma для переносимого кода.

...