代码之家  ›  专栏  ›  技术社区  ›  ChrisMM

如何确定要包含哪些头文件?

c++
  •  5
  • ChrisMM  · 技术社区  · 6 年前

    假设我有下面(非常简单)的代码。

    #include <iostream>
    int main() {
        std::cout << std::stoi("12");
    }
    

    错误C3861:“stoi”:找不到标识符

    std::stoi 是这个计划的一部分 <string> 头,这可能是前两个编译器的一部分 <iostream> 后者则不然。根据C++标准标题上的资源]

    一个C++头可以包括其他C++头。

    当我的一个学生提交了作业,助教将其标记为未编译时,这个问题就出现了;我当然去修复了它。不过,我想防止今后发生这样的事件。那么,除了每次都要在三个不同的编译器上编译之外,有没有办法确定应该包含哪些头文件呢?

    我唯一能想到的办法就是确保 std

    三个编译器的示例: https://godbolt.org/z/kJhS6U

    1 回复  |  直到 6 年前
        1
  •  14
  •   Lightness Races in Orbit    6 年前

    有没有更简单/更好的方法来确保跨编译器的兼容性?

    当您编写使用标准特性的新代码时,例如 std::stoi ,将该名称插入谷歌,转到cppreference.com网站文章,然后查看顶部,看看它是在哪个标题中定义的。

    如果还没有包括在内,那就包括在内。工作完成了!

    (你呢 能够

    不要被诱惑去把一切都抛诸脑后 cheap, unportable hacks <bits/stdc++.h> !


        2
  •  -1
  •   Marek R    6 年前

    或者你可以使用CLion(适用于所有平台),它也有这个功能(事实上,这是相同的制造JetBrains)。

    include what you used ,但它的目的是利用前向声明,我从来没有用过(我个人-我的队友为我们的项目做了)。