【问题标题】:vscode cannot open source file "iostream"vscode 无法打开源文件“iostream”
【发布时间】:2021-04-01 21:25:29
【问题描述】:

我是 c++ 和 vscode 的新手,所以我不确定如何解决这个问题。我尝试在https://code.visualstudio.com/docs/cpp/config-clang-mac 上阅读教程,但如果没有 iostream、向量和字符串错误,我似乎无法粘贴他们的“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 errors detected. Please update your includePath. Squiggles are disabled for this translation unit (/Users/rjc/projects/helloworld/helloworld.cpp).C/C++(1696)

我在我的 includePath 中添加了这一行(配置页面状态每行添加一个 includePath,因此我将这两个语句放在不同的行上): ${workspaceFolder}/** /Users/rjc/projects/helloworld/

但这并没有减少错误的数量。我不太确定在这里做什么,因为该教程似乎对我不起作用。

我正在运行带有 clang 版本 12.0.0 的 macOS Big Sur (11.1)。对于我为什么会遇到这些问题的任何直觉,我将不胜感激。

【问题讨论】:

  • 尝试将&lt;iostream&gt; 替换为"iostream"...&lt;header_file&gt;"header_file" 之间存在差异,这里有一些你会发现有用的东西:*.com/questions/21593/…
  • 你试过直接编译吗?使用您的文件作为参数调用 clang++,如果它有效,则它是 VSCode 问题,而不是编译器问题。
  • 我认为直觉是includePath 仅用于“智能感知”,它不会影响编译器。现在为什么你的编译器找不到头文件是另一个问题。正如 Kalldr 所说,您应该尝试在 VSCode 之外使用编译器来确定它是编译器问题还是 VSCode 问题。
  • @NovusEdge 我替换了所有三个,但编译器仍然返回相同的错误。它一直告诉我更新我的 includePath
  • @rjc810 该建议不正确(可能作为诊断工具除外)。 #include &lt;iostream&gt; 是正确的代码。

标签: c++ macos visual-studio-code computer-science include-path


【解决方案1】:

您的 includePath 只有${workspaceFolder}。您需要将路径添加到系统目录。运行此命令并确保打印出的所有路径都列在您的 c_cpp_properties.json 中:gcc -v -E -x c++ -

【讨论】:

  • 打开你的终端应用并运行上面的命令。
  • 我将所有路径复制粘贴到 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"
  • 更新:删除 workspaceFolder 字符串似乎满足编译器。不过,我仍然从这条线上得到一个错误。 vector msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};编译器告诉我声明末尾应该有一个分号,但是我的数组后面有一个分号。我在这里错过了一些微不足道的事情吗?谢谢!
  • 尝试在 vscode 中安装“包含自动完成”扩展。
  • 安装了扩展。不知道为什么代码给了我错误,因为我直接从 vscode 教程中复制粘贴了它。是不是我的 vscode 版本有问题?
【解决方案2】:

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

我看到这些 stdlib 在安装了 gcc 而没有 C++ cpp 支持的 (centos) 系统上包含错误。安装缺少的打包修复了 vscode 中的错误。无法从终端编译 hello.cpp 表明我的根本问题不在 vscode 中。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我想尽办法让它工作

    然后我意识到,当我命名文件时,我只将它命名为 helloworld 而不是 helloworld.cpp,因为在我一直使用的其他 IDE 中不需要它。

    【讨论】:

    • &lt;iostream&gt;标准头而不是用户文件。
    最近更新 更多