【发布时间】:2017-01-25 05:43:45
【问题描述】:
我有 GCC 4.1.2 的 RHEL,并且我的 C++ 代码正在按预期编译。但是当我尝试使用 GCC 6.2.0 在 CentOS 7.2 上编译时,相同的代码会失败并出现以下错误:
compiling UpcSummarization.o ...
UpcSummarization.cpp: In member function âvoid UpcSummarization::LoadUpcList(std::__cxx11::string)â:
UpcSummarization.cpp:480:40: error: âmemsetâ was not declared in this scope
memset(&pBuffer, 0, sizeof(100));
^
我包含以下头文件:
string
如果我包含string.h 或cstring,它将通过。
知道如何使其仅使用 string 包含文件吗?迁移代码库以包含 string.h 或 cstring 不是一种选择
编辑
是的,它是字符串。
也许我应该将其表述为 second option 而不是 not an option
在开始代码迁移之前,我需要排除编译器选项使其按原样工作的任何可能性。
如果需要,我可以安装额外的库并更改其编译方式。没有实际编辑代码。
【问题讨论】:
-
好吧,
memset在cstring中。为什么不包括正确的标题?! -
无关,但你确定
sizeof(100)是你需要的吗? -
@Biffen,我不确定我的编译方式是否正确。并且不确定我是否应该真正更改代码。由于它适用于旧版本的 OS 和 GCC,我需要了解可以通过更改其编译方式来修复它。
-
@KrishSanj 它可能适用于早期版本,因为某些标头碰巧包含其他标头。这并不意味着它是正确的。然而,是正确的是,当你想使用
memset(或者,可以说,停止使用memset)时包含cstring。 -
@KrishSanj “实际上没有编辑代码”——在这种情况下,您很可能无法移植到 6.2,抱歉。