Visual Studio Code无法打开源文件"iostream"。

12
我是C++和Visual Studio Code的新手,不确定如何解决这个问题。我尝试按照在Visual Studio Code中使用Clang教程,但我无法粘贴他们的"Hello, World!"代码,因为出现了、和错误。
我还在这里看到过一些帖子,指示我应该更改配置中的includePath字符串数组,但是添加项目文件夹路径似乎无法消除这些错误。到目前为止,我看到的所有内容都没有起作用,我很困惑。
引起这些错误的代码直接从上述教程复制粘贴而来:
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}

在前三行中,我收到了错误消息"cannot open source file {the included import's name}"。编译器显示如下:

检测到#include错误,请更新您的includePath。此翻译单元(/Users/rjc/projects/helloworld/helloworld.cpp)已禁用波浪线。C/C++(1696)

我在我的includePath中添加了这一行,如下所示(配置页面说明每行添加一个includePath,因此我将这两个语句放在不同的行上): ${workspaceFolder}/** /Users/rjc/projects/helloworld/ 然而,这并没有减少错误数量。我不确定该怎么做,因为教程似乎对我不起作用。
我正在运行macOS 11.1(Big Sur),Clang版本为12.0.0。为什么会出现这些问题?

2
尝试将<iostream>替换为"iostream"... <header_file>"header_file"之间有区别。 这里有一些你会发现有用的东西:https://dev59.com/SXVD5IYBdhLWcg3wTZ1m - Novus Edge
你尝试直接编译它了吗?如果可以使用clang++并将文件作为参数调用,则说明这是VSCode问题,而不是编译器问题。 - Kaldrr
@NovusEdge 我已经替换了所有三个,但编译器仍然返回相同的错误。它一直告诉我更新我的includePath。 - rjc810
1
@rjc810 那个建议是不正确的(除非可能作为诊断工具)。#include <iostream> 是正确的代码。 - john
@john 抱歉,我对此还很陌生,我应该如何在 VS Code 之外尝试编译它?我只需要在终端中运行 clang++ helloworld.cpp 吗? - rjc810
显示剩余5条评论
8个回答

21

你的includePath只有${workspaceFolder},你需要添加系统目录的路径。运行以下命令,并确保输出的所有路径都列在你的c_cpp_properties.json文件中:gcc -v -E -x c++ -


2
我将所有路径复制粘贴到properties.json中的includePath数组中,但仍然出现相同的错误。我的路径如下: "${workspaceFolder}/**", "/usr/local/include", "/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1", "/Library/Developer/CommandLineTools/usr/lib/clang/12.0.0/include", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include", "/Library/Developer/CommandLineTools/usr/include", "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks" - rjc810
更新:删除workspaceFolder字符串似乎可以满足编译器。但是我仍然从这一行得到一个错误。vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"}; 编译器告诉我在声明的末尾需要一个分号,但我的数组在其后有一个分号。我是否错过了一些微不足道的东西?谢谢! - rjc810
1
尝试在 vscode 中安装“Include Autocomplete”扩展。 - Allen ZHU
没问题!我已经安装了它-但是在这一行代码上我仍然遇到错误: vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"}; - rjc810
遇到了同样的问题,Allen,这种方法起作用了。您能详细说明一下这个命令实际上是做什么的吗?我是新手。 - Abhinav
显示剩余4条评论

4

如上所述,您应该

  • 在终端中运行以下命令:gcc -v -E -x c++ -
  • 然后它会显示所有要包含的路径,如图所示

enter image description here

  • 现在在 VS Code 中打开搜索此文件 c_cpp_properties.json(通过在 VS Code 中按下cntrl + p
  • 现在打开 c_cpp_properties.json 文件,并将我标记的所有文件路径粘贴进去(在您的情况下可能会更多或更少),如图所示

enter image description here

  • 然后你就准备好了!
  • 编程愉快!

不要截图,添加代码或文本。 - varshneydevansh

0

您只需要在c_cpp_properties.json文件中更改3次。

  1. "name": "Mac"

  2. 将"usr/include/linux"添加到"includePath"

  3. "intelliSenseMode": "clang-x64"

此解决方案仅适用于Linux用户。


0

确保在 compilerPath 设置中指定的编译器存在,并且支持 C++。

我在一个已安装 GCC 但不支持 C++ 的 (CentOS) 系统上看到了这些 stdlib 包含错误。安装缺失的软件包可在 Visual Studio Code 中解决这些错误。从终端无法编译 hello.cpp 让我明确我的根本问题不在于 Visual Studio Code。


0

我正在使用mingw g ++编译器。 当我运行程序时,我也遇到了这个错误。 我只是改变了编译器路径。 在我的情况下它起作用了。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0

在Ubuntu上,我安装了不同的gcc/g++版本。

检查你的C++版本

c++ -v

检查目录/usr/include/c++,如果缺少相应版本(10/或11/或12/),请安装sudo apt install libstdc++-XX。我不得不安装libstdc++-12

sudo apt install libstdc++-12

0

顺便说一下,我这周在启动一个新的cpp项目时遇到了类似的问题 - 结果发现当我从Windows切换到Linux时,在启动项目的中途,我忘记更新tasks.json和c_cpp_properties.json文件(.vscode目录中),它们仍然使用Windows路径标准(\而不是/)。 一旦我解决了这个问题,一切都好了。 顺便说一下,我将我的tasks.json设置为任务数组,将c_cpp_properties.json设置为配置数组,这样我可以分别添加Windows编译器选项和Linux编译器选项 - 在构建时我会选择使用哪一个。


-2

我曾经遇到同样的问题,试图尝试各种方法来解决它。

后来我意识到,当我命名文件时,我只给它命名为helloworld而没有加上helloworld.cpp的后缀,因为在我使用的其他IDE中不需要这样做。


3
但是<iostream>是一个标准头文件,而不是用户文件。 - Toby Speight

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