для моего проекта, над которым я работаю, я столкнулся с проблемой, когда Microsoft Visual Studio 2010, похоже, продолжает ссылаться на старые файлы, даже если они были исключены из решения, а новые были импортированы.
Ситуация в целом: у меня был проект, в котором я создал немного другую версию определенного класса (экстрактор функций SIFT, если людям интересно), который немного более оптимизирован и также исправленошибка или 2, которые были в коде, который я нашел в Интернете.В результате я создал следующие новые файлы:
- SIFT.h - Моя версия заголовка для класса экстрактора возможностей
- SIFT.cpp - Моя реализация класса экстрактора возможностей
- Keypoint.h - заголовок, который определяет объект 'Keypoint', который используется экстрактором объектов.
- Descriptor.h - заголовок, который определяет объект 'Descriptor', которыйописание объекта Keypoint.
Эти файлы добавлены в решение, которое было построено на версии OpenCV 2.2 (которая является библиотекой Computer Vision), и оно имеет правильную связь с библиотекамиВерсия OpenCV 2.2.Скомпилировал, запустил, работает.
Мне пришлось вернуться на OpenCV 2.1 из-за поддержки видео, которая не работает должным образом в 2.2 (или, по крайней мере, у меня проблемы с этой версией).Для этого я сделал новое решение и связал все с библиотеками OpenCV 2.1.Файлы, которые я упомянул выше, я «импортировал» их, щелкнув правой кнопкой мыши соответствующую папку -> Добавить -> Существующий элемент.Поэтому я импортировал файл SIFT.cpp в папку «Исходные файлы», а 3 заголовка - в папку «Файлы заголовков».Скомпилировал, запустил, работает.
Теперь наступает момент, когда возникает моя проблема.Мой коллега попросил меня посмотреть, что на самом деле происходит, когда я использую код, на котором я основывал свой код (в нем были ошибки и он был немного менее оптимизирован).Поэтому я удалил «импортированные» файлы с помощью метода «Add-> Existing Item», описанного выше, а затем импортировал другие файлы также с помощью метода «Add-> Existing Item».Добавлены следующие файлы: - SIFT.h - исходная версия заголовка для класса экстрактора объектов - SIFT.cpp - оригинальная реализация класса экстрактора объектов - KeyPoint.h - заголовок, который определяет объект «Keypoint», которыйиспользуется экстрактором функций.- Descriptor.h - Заголовок, который определяет объект «Дескриптор», который является описанием объекта Keypoint.Обратите внимание, что там файлы действительно имеют почти одинаковые имена, но по-прежнему имеют разное содержимое.Я исправил несколько ошибок сопряжения, потому что, если заглавные буквы разные, то скомпилировал их ... И получил:
ошибка LNK1120: 1 неразрешенная внешняя часть
C: \ Users \ мое имя \ Documents \ Visual Studio 2010 \Проекты \ name solution \ Release \ name solution.exe
ошибка LNK2001: неразрешенный внешний символ "public: void __thiscall SIFT :: doSift (void)" (? DoSift @ SIFT @@ QAEXXZ)
C:\ Users \ my name \ Documents \ Visual Studio 2010 \ Projects \ name solution \ name solution \ Executables.obj
Затем я заметил, что программа ссылается на метод doSift класса SIFT, которыйнаименование моей версии SIFT, а не другой версии, которую я получил из Интернета, вместо этого используется имя «DoSift»!Затем я начал проверять ссылки в коде, который использует объект SIFT (щелкните правой кнопкой мыши -> Перейти к определению), и он ссылается на мою версию файла SIFT.cpp вместо другой, которая теперь добавлена врешение (и единственное в решении.) То же самое относится и к заголовкам ... Visual Studio ссылается на мои версии, которые больше не находятся даже в решении, вместо тех, которые должны проверять, которые находятся в решении.
Вероятно, я могу обойти эту проблему, просто создав новое решение с нуля. Но это также означает, что я должен установить связь с файлами OpenCV ... И, конечно, есть способ предотвратить эту дополнительную работу каждый раз, когда я хотел бы использовать другую версию кода.
Я уже пытался очистить решение (используя Clean Solution из меню, вызываемого правой кнопкой мыши) и восстановить его после этого. Но это не решает проблему. Я не использую какой-либо другой тип управления версиями, потому что, честно говоря ... я этого еще не понимаю.
Кто-нибудь может мне помочь с этим?
Заранее спасибо,
Xilconic