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

时间:2018-04-04 16:28:59

标签: c++

我正在制作一个C ++程序,我试图用import *导入所有程序。 但我尝试的并没有奏效。我想我可能会对Python的#include <*> using namespace std; int main() { cout << Hello! << endl; return 0 } 函数感到困惑。

这是我的代码:

c++ test.cpp -o test.exe

然后,我打开了cmd并键入:

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>

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

{{1}}

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

3 个答案:

答案 0 :(得分:12)

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

你也应该摆脱using namespace std;

答案 1 :(得分:8)

  1. C ++不是Python。

    你的意思是Python的from module import *?因为这与你建议的C ++版本会有什么不同(如果它存在,它没有),无论如何

  2. 头文件不是模块。

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

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

  3. 如果您建议的语法确实有效(同样,它没有) - 它将包含所有文件。不是所有的.h文件,只是......一切。 C ++没有必要的文件扩展名(我已经看过.h,.hpp,.hxx,.cpp,.cxx和.C以及一些罕见的文件扩展名)所以没有隐式过滤器在通配符上。

答案 2 :(得分:5)

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

// includes.hpp
#pragma once
#include <iostream>
#include <string>
#include <vector>
// ...

以下是你如何使用它:

// 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;
}

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

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