如何在c ++中导入所有#include?

Tho*_*ips 3 c++

我正在制作一个C++程序,而我正在尝试导入所有内容#include.但我尝试的东西不起作用.我想我可能会对Python的import *功能感到困惑.

这是我的代码:

#include <*>

using namespace std;

int main()
{
    cout << Hello! << endl;
    return 0
}
Run Code Online (Sandbox Code Playgroud)

那么,我打开了cmd并键入:

c++ test.cpp -o test.exe
Run Code Online (Sandbox Code Playgroud)

这就是我得到的错误......

Microsoft Windows [Version 10.0.16299.309]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Users\thoma>cd Desktop

C:\Users\thoma\Desktop>c++ test.cpp -o test.exe
test.cpp:1:13: fatal error: c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\*: Invalid argument
 #include <*>
             ^
compilation terminated.

C:\Users\thoma\Desktop>
Run Code Online (Sandbox Code Playgroud)

我的编译器是MinGW.任何帮助或答案将不胜感激.

Chr*_*ckl 12

#include <*>不是C++,也没有类似的功能可供使用.您必须明确指定所需的每个标头.这是一个很好的事情.习惯它.

你也应该摆脱using namespace std;.


Use*_*ess 8

  1. C++不是Python.

    你的意思是Python的from module import *吗?因为这与您建议的C++版本不同(如果它存在,它不存在),并且无论如何

  2. 头文件不是模块.

    C++没有真正的模块.您可以组织目录结构并将系统构建到逻辑模块中,但您必须自己完成.

    但是include指令本身是一个文本操作:它只是粘贴指定文件的内容来代替指令.没有模块范围,它只是...... 那里.

  3. 如果您建议的语法确实有效(再次,它没有) - 它将包括所有文件.不是所有的.h文件,只是......一切.C++没有必需的文件扩展名(我见过.h,.hpp,.hxx,.cpp,.cxx和.C以及一些罕见的文件扩展名)因此通配符上没有隐式过滤器.


小智 5

是的,你在这里很困惑.使用#include,您确实包含了一个文件.这意味着,编译器获取文件内容并放置#include-statement的位置和位置.代码中的每个包含都会扩展您的文件.这意味着编译器有更多工作待办事项.如果您要包含所有文件,那么您的编译器会提供这些文件.C++ include-system不是pythons模块系统.所以你必须包含你真正想要的那些文件.您可以做的是,您可以创建一个头文件,在那里放置您经常需要的那些包含,然后您只包含此头文件.然后,您的编译器将包含您包含的文件.例:

// includes.hpp
#pragma once
#include <iostream>
#include <string>
#include <vector>
// ...
Run Code Online (Sandbox Code Playgroud)

这是你如何使用它:

// main.cpp
#include "includes.hpp"

int main(int argc, char **argv) {
    std::string some_text = "Hello there";
    std::cout << some_text << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另请注意,请勿在头文件中使用namespace.包含此标头的每个标头也将使用命名空间语句来获取此标头.这可能会在将来产生问题.我也不在代码文件中使用它.您可以在命名空间的特定部分上使用.但这是另一个话题.也许只是谷歌使用命名空间问题.

这里有什么重要的说法.即使您使用此类包含标头保存了一些工作.请注意使用它们.就像我说的,包括真正复制文本,所以你的编译器有更多的待办事项.因此,您的编译时间会增加.在某些情况下,这是一个很好的解决方案,但大多数情况下,最好包含您真正需要的部件.在许多情况下,您甚至不需要包含标头,但您可以使用前向声明.试着为将来记住这一点.