繁体   English   中英

string.h和<string>

[英]string.h and <string>

我正在尝试在旧版C ++项目中构建一个库。 平台是使用gcc编译器的power-pc。

编译器给出类似于以下的生成错误错误:字符串:没有这样的文件或目录,或者错误:向量:没有这样的文件或目录。

  • 我的理解是它无法找到标准库。 标准库文件通常位于何处,并且采用哪种格式? 是* .h还是其他? 我在互联网上搜索了此内容,但我认为我不太了解。

  • 令人困惑的是,同一项目中使用相同源代码文件的另一个库完全可以构建。 这向我暗示这两个项目的makefile可能不同,其中一个IS能够找到std lib,而另一个没有。 但是快速比较一下两者并没有带来任何明显的差异。 还有其他想法吗?

  • 最后,我刚刚了解到string.h用于C风格的字符串,而string用于C ++ std lib。 可以将它们混合在一起吗,即源文件包含#include string.h,还可以通过包含其他文件来隐式包含#include字符串? 我问是因为这种情况在没有构建的文件中也是如此。

谢谢。

错误信息:

编译SOURCE_FILE.cpp

在SOURCE_FILE.cpp:3包含的文件中:

HDR_FILE.h:1:错误:字符串:没有这样的文件或目录

HDR_FILE.h:2:错误:向量:没有这样的文件或目录

SOURCE_FILE.cpp中的代码

#include <stdlib.h>
#include <string.h>
#include "fileABC.h"

using namespace std;

// Other code

HRD_FILE.h中的代码

#include <string>
#include <vector>
#include <hdr.h>
#include <hdr-cseq.h>
//... OTHER FILES ETC.

如果未将文件检测为C ++源代码,则可能会出现类似的错误。 是否使用适当的文件扩展名来命名c ++文件?

猫测试

#include <vector>
int main() {}

gcc test.c

test.c:1:18: error: vector: No such file or directory

上面的命令将编译C代码,但不会编译C ++。 请记住,这是两种不同的语言。 要构建C ++程序,您必须以一种或另一种方式告诉编译器源是C ++。 如果您使用g ++,它将自动假定扩展名为'.c'的文件为C ++(至少我的版本是C ++。或者,您可以在传递文件之前通过-x c++告诉编译器使用C ++。您还必须告诉包含C ++库的链接器,g ++也会自动执行此操作,也可以传递链接器标志-lstdc++

困难的方法:

gcc -x c ++ test.c -lstdc ++

简单的方法:

g ++ test.c

为回答最后一个问题,您可以自由地混合<string.h><string> (尽管您可能应该使用<cstring>而不是<string.h> )。

C语言字符串不同于C ++ std :: string。

C语言字符串类型是由nul,零,'\\ 0'字符结尾的字符序列。 用于管理此数据结构的函数声明分别在<string.h> or <cstring> ,具体取决于您是以C还是C ++进行编译。

C ++ std :: string类型是字符的容器。 实际的实现在编译器之间可能会有所不同,但接口不会。 std :: string的方法在<string>.中声明<string>. 必须设置编译器以使用C ++语言进行编译。

C ++ std :: string具有生成C语言字符串以及从C语言样式字符串创建C ++字符串的方法。 阅读标准模板库以获取更多信息。

另外,在网上搜索“ C ++ FAQ”。 这是在使用C ++语言进行编程之前必须阅读的内容。 C语言也有一个常见问题解答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM