错误C1083:无法打开源文件,根本不应该寻找该文件。

17

我想要#include一个包含一些函数的cpp文件,以便稍后在其他项目中使用该cpp文件。但我的项目出现了'already defined in .obj'错误,此后该.cpp文件似乎与我的项目绑定在了一起。(我知道这不是正确的方法,答案在这里帮助我解决了已定义问题

如果我从项目中排除.cpp文件,从目录中删除它,并且删除#include行,它仍然会寻找它:

c1xx : fatal error C1083: Cannot open source file: 'std.cpp': No such file or directory

诊断:

Outputs for D:\MY DOCUMENTS\C#\PROJECT\D3DTESTC++\COWS AND BULLS\CBMAIN.CPP|D:\MY DOCUMENTS\C#\PROJECT\D3DTESTC++\COWS AND BULLS\STD.CPP: (TaskId:15)

它根本不应该寻找std.cpp,我已经将其删除!那么有没有一种方法可以重置项目并重新编译,使程序不再寻找它?我已经尝试过重新构建和清除->构建项目


你尝试过在“生成”菜单中的“清理解决方案”吗? - JBL
我找不到任何生成菜单,我正在使用Visual C++ Express 2010。在“生成”菜单中有一个“清理解决方案”,我已经尝试过了,但没有用。 - Bonnev
你确定你没有删除文件本身吗?对我来说,错误消息是指该文件在项目中但不在磁盘上。 - john
1
你是将文件从项目中排除还是删除了文件?我记得 VC++ 2010 给出了这两个选项。考虑到你已经删除了文件本身,我建议选择删除。 - john
它被排除在项目之外。 - Bonnev
显示剩余6条评论
17个回答

17

当我在使用VS Express时遇到类似的问题,最终我不得不打开.vcxproj文件(它只是XML),并删除有问题的< ClInclude Include="FILEPATHANDNAME" >标签。


14

这里的许多解决方案都不起作用。

可靠的方法:

  1. 在文本编辑器中打开给您带来麻烦的vxproj文件。
  2. 删除所有引用无法找到的文件的内容。

1
这个对我来说确实有效。被接受的答案却没有用。 - Mert
1
发生了同样的事情 - 接受的答案不起作用,但我打开了vxproj文件并删除了该文件的引用,然后项目成功编译了。顺便说一下,我正在使用VS2022。 - Jonathan

12

好的,我不知道我是怎么做到的,但我仍然会尝试写下我所做的事情。

  1. 保存全部关闭解决方案
  2. 打开.vcxproj文件 (而不是 .sln)
  3. 生成 -> 清理 [项目名称]
  4. 保存全部关闭
  5. 再次打开.sln文件。
  6. 生成 -> 仅项目 -> 仅清理 [项目名称]
  7. 生成 -> 仅项目 -> 仅生成 [项目名称]

这正是我所做的,对我起作用了。我认为主要要做的是清理、保存、关闭、打开、生成,但我不确定。


1
我重命名了一个源文件,然后出现了这个问题。你的解决方案似乎不太可行,但对我起作用了。谢谢! - BartekM

9
在解决方案资源管理器中,您可以选择/取消选择“显示所有文件”选项。 尝试这两个选项,并确保排除的文件在两个选项下都不包含在项目中。
我的情况如下: 我使用了“显示所有文件”选项(因此您可以看到项目目录中的所有文件)。我从项目中排除了其中一个 .cpp 文件。但是,它的行为就像这个文件在项目中一样。
我是这样解决的: 我关闭了“显示所有文件”选项,发现该文件仍然属于项目!所以我再次排除了这个文件。
据我所见,这是一个已知问题。
这对我有用,希望对其他人也有用。

这对我来说是真正的解决方案。 - Val

3
尝试将构建器输出设置为详细模式,以查看正在进行的确切步骤。 我想您使用的是Visual Studio,对吗?
  1. 转到菜单“工具 -> 选项”
  2. 在选项对话框中,选择“项目和解决方案 -> 构建和运行”
  3. 将“MSBuild项目构建输出详细程度”的当前模式从“最小”更改为类似于“诊断”或“详细信息”的模式。
  4. 重新构建您的项目并调查输出窗口
构建器转储应该更清楚地显示您当前的设置(我怀疑您对该文件有更多引用)。

我已经打开了诊断选项,但仍然无法理解它来自哪里。 - Bonnev
我建议在解决方案文件夹(包括所有子文件夹)中进行全文搜索,以查找“std”字符串作为最后的手段。这可能会给你一些线索,告诉你该名称实际上被引用在哪里。 - Yury Schkatula

3

这种情况发生在我从IDE内部更改文件夹名称时。以上解决方案都无效。唯一的解决方法是使用记事本打开vcproj文件,然后您应该在<ItemGroup>中看到有问题的文件。只需删除这些行即可。


2

有时候,就像我的情况一样,问题仅仅在于位置中文件夹的命名。我有一个非常长的路径,其中的文件夹我喜欢用特殊字符命名,这样它们就会显示在顶部,很容易访问。

只要我把解决方案放在D盘的一个文件夹里,问题就解决了。


2
当我重命名一个文件时,我发现我需要去解决方案资源管理器中的源文件,选择该文件,首先将其从项目中排除,然后重新添加到项目中,并重新构建它所在的解决方案。对于我来说,它仍然显示为旧的文件名。

2

我曾经遇到同样的问题,但是我有另一个.sln文件可以正常工作。尝试了一些在Project->Properties中调整使其看起来相同的方法,但都没有效果。我打开了两个.vcxproj文件,并将工作版本的内容复制到了我的不工作的版本中。(我注意到这两个文件长度不同,不工作的版本比工作的版本多大约20行)。然后我只是将RootNameSpace更改为不工作版本的名称。我保存了不工作的文件,然后就好了。


我实际上是为自己放置了这个答案。主要错误是“IntelliSense:无法打开源文件”,这种情况一直在发生,真是让人抓狂!问题在于它出现的频率太低,以至于我忘记搜索c1083错误...它被深埋在编译器消息中。小心! - Brian S. Penn
另外,我试图将我的MSVS C 2010代码升级以在MSVS 2015中运行FLTK。这似乎只有在我在MSVS2015中创建一个新项目,然后将旧代码复制到新项目中才能实现。 - Brian S. Penn

1

对于遇到“错误C1083:无法打开源文件”的问题的人:

该错误是由*.vcxproj文件中的设置引起的。可能您是通过文件资源管理器删除/移动源文件,而不是通过Visual Studio的“解决方案资源管理器”进行操作。因此,您的*.vcxproj文件已经损坏。修复方法是手动更正*.vcxproj文件中的设置。

Visual Studio设置文件的工作原理

Visual Studio将解决方案的信息保存到文件中。该文件通常位于项目的解决方案目录中,具有扩展名.sln,基本名称与解决方案的名称相同,例如:

NameOfSolution.sln

同样地,项目的信息被保存在一个文件中(每个项目都有自己的文件)。这个文件的基本名称是项目的名称,扩展名为 .vcxproj,并且通常位于名为您的项目的子目录中,例如:

NameOf1stProject/NameOf1stProject.vcxproj

NameOf2ndProject/NameOf2ndProject.vcxproj

*.sln和*.vcxproj文件都是文本文件。您可以使用记事本打开它们。

如何解决问题

  1. Find *.vcxproj file responsible for your project.

    If you don't know where it is, open in Notepad the *.sln file of your solution. Search for name of your solution. You will find line like:

    Project("{9AA9CEB8-8B4A-11D0-8D22-00B0C01AA943}") = "NameOf1stProject", "NameOf1stProject\NameOf1stProject.vcxproj", "{A8735D0A-25ED-4285-AB8F-AF578D8DB960}"
    

    Value under "NameOf1stProject\NameOf1stProject.vcxproj" is location of *.vcxproj file of your project.

  2. Open found *.vcxproj file by text editor (f.ex. Notepad).

  3. Search for line on which is filename you are struggling with.

    Example: if you are looking for "RemovedFile.cpp", then you should find line:

    <ClCompile Include="RemovedFile.cpp" />
    
  4. Delete that line.

  5. If you have opened Visual Studio, it asks you if it should refresh solution - select yes. If it is not opened - just start using it.

  6. In case of any problems, try to rebuild solution (top banner -> Build -> Rebuild Solution)

在我的情况下,它起作用了。尝试修复了30分钟,<1分钟就解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接