Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器说它找不到文件,但在“中”报告错误;“未找到”;文件_C++_Compiler Errors_Compilation_Include - Fatal编程技术网

C++ 编译器说它找不到文件,但在“中”报告错误;“未找到”;文件

C++ 编译器说它找不到文件,但在“中”报告错误;“未找到”;文件,c++,compiler-errors,compilation,include,C++,Compiler Errors,Compilation,Include,我有两个短文件位于同一目录中。每一项的内容如下所示 文件test.cpp包含: int main() { #include <test.h> } syntax_error 在使用g++或clang++编译test.cpp时,我得到了预期的错误 test.cpp:3:11: error: 'test.h' file not found with <angled> include; use "quotes" instead #include &l

我有两个短文件位于同一目录中。每一项的内容如下所示

  • 文件
    test.cpp
    包含:

    int main()
    {
        #include <test.h>
    }
    
    syntax_error
    
在使用
g++
clang++
编译
test.cpp
时,我得到了预期的错误

test.cpp:3:11: error: 'test.h' file not found with <angled> include; use
  "quotes" instead
    #include <test.h>
             ^~~~~~~~
             "test.h"
基本上,第一个错误报告编译器找不到文件
test.h
,第二个错误报告编译器报告找不到的文件中的语法错误

这是唯一产生的两个错误


我理解编译器报告第一个错误的原因,在这种情况下,我应该使用带有
#include
的引号。但是,为什么编译器在明确找到文件后却说找不到该文件?而且,为什么它会继续报告“未找到”文件中的错误?

这是一个功能,而不是一个bug

其思想是,如果错误很小(如缺少分号),那么编译器将尝试继续编译,就像您已经修复了错误一样。这使您能够一次性修复多个错误。当编译代码需要很长时间时,这尤其有用

想象一下,修复一个丢失的分号,重新编译五个小时,以便编译器找到另一个丢失的分号。然后你必须重新编译。那会很令人沮丧,不是吗

基本上,编译器将尽可能地从任何错误中恢复,以便能够报告尽可能多的错误。大多数编译器对此都有标记

但是,为什么编译器在明确找到文件后却说找不到该文件

编译器发现文件是的,这就是为什么它提示您使用
而不是
。如果没有,它可能不会给你暗示。尽管如此,编译器还是不允许正确编译代码,因为您的代码格式不正确


作为类比,仅仅因为编译器发现了一个缺少的分号,这并不意味着它就可以用这个缺少的字符编译代码(如果它试图符合标准的话)。但是,它将恢复并尝试查找其他错误(如果有)。

这是一项功能,而不是一个bug

其思想是,如果错误很小(如缺少分号),那么编译器将尝试继续编译,就像您已经修复了错误一样。这使您能够一次性修复多个错误。当编译代码需要很长时间时,这尤其有用

想象一下,修复一个丢失的分号,重新编译五个小时,以便编译器找到另一个丢失的分号。然后你必须重新编译。那会很令人沮丧,不是吗

基本上,编译器将尽可能地从任何错误中恢复,以便能够报告尽可能多的错误。大多数编译器对此都有标记

但是,为什么编译器在明确找到文件后却说找不到该文件

编译器发现文件是的,这就是为什么它提示您使用
而不是
。如果没有,它可能不会给你暗示。尽管如此,编译器还是不允许正确编译代码,因为您的代码格式不正确


作为类比,仅仅因为编译器发现了一个缺少的分号,这并不意味着它就可以用这个缺少的字符编译代码(如果它试图符合标准的话)。但是,它将恢复并尝试查找其他错误(如果有)。

第一条消息非常简单:它说,“我找到了它,但在错误的位置。请使用引号,Luke。”看起来你不小心使用了
。相关:感谢链接,尽管我熟悉
之间的区别,但我并不好奇<代码>
具有实现定义的行为。这个特定的实现也会在本地文件夹中查找,它会告诉您您的程序不兼容,原因以及如何修复它,然后开始查找更多错误。如果您仔细阅读,消息并不是说找不到该文件,而是说在一个
搜索路径中找不到该文件。如果根本找不到它,你会得到一条不同的消息。第一条消息很简单:它说,“我找到了它,但在错误的地方。使用引号,卢克。”看起来你不小心使用了
。相关:感谢链接,尽管我熟悉
include之间的区别,但我并不好奇<代码>
具有实现定义的行为。这个特定的实现也会在本地文件夹中查找,它会告诉您您的程序不兼容,原因以及如何修复它,然后开始查找更多错误。如果您仔细阅读,消息并不是说找不到该文件,而是说在一个
搜索路径中找不到该文件。如果根本找不到,你会收到另一条信息。
In file included from test.cpp:3:
./test.h:1:1: error: use of undeclared identifier 'syntax_error'
syntax_error
^