我正在制作一个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;.
C++不是Python.
你的意思是Python的from module import *吗?因为这与您建议的C++版本不同(如果它存在,它不存在),并且无论如何
头文件不是模块.
C++没有真正的模块.您可以组织目录结构并将系统构建到逻辑模块中,但您必须自己完成.
但是include指令本身是一个文本操作:它只是粘贴指定文件的内容来代替指令.没有模块范围,它只是...... 那里.
如果您建议的语法确实有效(再次,它没有) - 它将包括所有文件.不是所有的.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.包含此标头的每个标头也将使用命名空间语句来获取此标头.这可能会在将来产生问题.我也不在代码文件中使用它.您可以在命名空间的特定部分上使用.但这是另一个话题.也许只是谷歌使用命名空间问题.
这里有什么重要的说法.即使您使用此类包含标头保存了一些工作.请注意使用它们.就像我说的,包括真正复制文本,所以你的编译器有更多的待办事项.因此,您的编译时间会增加.在某些情况下,这是一个很好的解决方案,但大多数情况下,最好包含您真正需要的部件.在许多情况下,您甚至不需要包含标头,但您可以使用前向声明.试着为将来记住这一点.