无法正确包含头文件

时间:2011-07-29 16:07:36

标签: c++ ubuntu compilation header-files

我遇到了一个问题,我正在添加一些包含

#include <stdio.h>
#include <unordered_map>
#include <mysql.h>

使用此命令进行编译,

g++ -Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX -I/usr/include/ -I/usr/include/c++/4.5/bits/ main.c -o program

当我删除MySQL和stdio上的.h时,它说它无法找到它们,但它可以在unordered_map上找到它。跆拳道?

4 个答案:

答案 0 :(得分:1)

一些标准库头被命名为例如“string”,“vector”等。你会在include目录中找到文件“unordered_map”,但你找不到文件“mysql”,只有“mysql.h”。

答案 1 :(得分:1)

从C的年龄开始,大多数标头的扩展名通常为.h,并且它们直接对应于系统中的文件。在C ++中,标准明确指定某些库组件具有不包括任何扩展名的include指令,例如<unordered_map>。这些库包括甚至不需要与文件对应,只是它们在包含时提供所需的接口。相比之下,mysql.hstdio.h以及必须包含在确切名称中的真实文件。

stdio.h的情况下,C ++库定义了一个包含<cstdio>,其中包含C stdio.h的所有功能,但将它们放在std命名空间而不是全局(这是C)中唯一的选择。

答案 2 :(得分:0)

文件扩展名不是可选的!你可以说

的原因
#include <unordered_map>

而不是

#include <unordered_map.h>

是因为该文件实际上被称为“unordered_map”,没有扩展名。

C ++确实有cstdio标题封装了C stdio.h,所以你可以包含它;但至于MySql.h,我不知道他们是否会发布这样的替代品。

答案 3 :(得分:0)

C ++省略了系统头文件中的“.h”,以区别于C头文件。标题为“标准C库的C ++标题”的部分下的详细here