Visual Studio一直引用旧文件

时间:2011-02-25 11:16:31

标签: c++ visual-studio-2010

对于我正在处理的项目,我遇到了Microsoft Visual Studio 2010似乎一直引用旧文件的问题,即使这些文件已从解决方案中排除并且已导入新文件。 / p>

整体情况: 我有一个项目,我创建了一个稍微不同的特定类版本(一个SIFT功能提取器,以防人们好奇),这是一个更优化的一点,并修复了我发现的代码中的错误或2在网上。结果是我创建了以下新文件:

  • SIFT.h - 我的特征提取器类标题的版本
  • SIFT.cpp - 我对特征提取器类的实现
  • Keypoint.h - 定义“关键点”对象的标题,由特征提取器使用。
  • Descriptor.h - 定义“描述符”对象的标题,它是关键点对象的描述。

这些文件添加到解决方案中,该解决方案基于OpenCV 2.2版本(计算机视觉库)构建,并且具有与OpenCV 2.2版本库的正确链接。编译,运行它,有效。

由于视频支持,我不得不改回OpenCV 2.1,这在2.2中无法正常工作(至少,我遇到了该版本的问题)。为此我创建了一个新的解决方案,并将所有内容链接到OpenCV 2.1的库。我上面提到的文件,我通过右键单击相应的文件夹''导入'他们 - >添加 - >现有项目。所以我将SIFT.cpp导入Source Files文件夹,将3个标头导入Header Files文件夹。编译,运行它,有效。

现在出现问题的部分。我的一位同事让我看看当我使用我自己编写的代码时实际发生了什么(它有错误并且稍微不那么优化)。所以我使用'Add->删除了我导入的文件'上面的现有项目'方法,然后使用'添加 - >导入其他文件现有项目的方法。添加的文件是:   - SIFT.h - 特征提取器类的标头的原始版本   - SIFT.cpp - 特征提取器类的原始实现   - KeyPoint.h - 定义“Keypoint”对象的标头,由特征提取器使用。   - Descriptor.h - 定义'Descriptor'对象的头,它是Keypoint对象的描述。 请注意,文件确实具有几乎完全相同的名称,但仍具有不同的内容。我修复了一些接口错误,因为如果不同的大写,那么编译它......并得到这些:

错误LNK1120:1个未解析的外部因素
C:\ Users \ my name \ Documents \ Visual Studio 2010 \ Projects \ 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

然后我注意到该程序指的是SIFT类的“doSift”方法,它是SIFT的我的版本的命名,而不是我从互联网上获得的另一个版本。使用名称“DoSift”代替!然后我开始检查使用SIFT对象的代码中的引用(右键单击 - >转到定义),它引用了SIFT.cpp的我的版本,而不是现在添加的另一个解决方案(并且是解决方案中唯一的解决方案。)同样适用于标头... Visual Studio引用的是我的版本,即使在解决方案中也不再存在,而不是它应该检查哪些在解决方案中

我可以通过从头开始创建新的解决方案来解决这个问题。但这也意味着我必须设置到OpenCV文件的链接......当然,每次我想使用不同版本的代码时,都有办法阻止这项额外的工作。

我已经尝试过清理解决方案(使用右键菜单中的Clean Solution)并在此之后重建。但这并没有解决问题。我没有使用任何类型的版本控制,因为坦率地说......我还不明白这些。

任何人都可以帮我解决这个问题吗? 提前致谢, Xilconic

1 个答案:

答案 0 :(得分:0)

您可能会检查一些事情。首先,确保您没有引用任何额外的包含目录(检查项目==>属性==> c / c ++ ==> general ==>“其他包含目录”设置)。其次,我发现直接打开vcproj文件以查看文件的来源是有帮助的。