确定C ++中包含的符号的来源

时间:2011-12-16 22:16:22

标签: c++ visual-studio include

我目前正在开展一个禁止包含C ++标准库的项目。我们使用的其中一个编译文件列出了以下符号: _Xran__Q2_3std12_String_baseCFv

我认为这与标准库字符串有关。我这么想是不正确的?如果没有,是否有人知道一种有效的方法来追踪这个符号的包含点?粗略搜索代码库并没有显示任何明显的东西。

2 个答案:

答案 0 :(得分:2)

这似乎不是VC破坏,总是以问号开头。

然而,它符合G ++修改方案,正如运行

所建议的那样
$ c++filt  --format=gnu "_Xran__Q2_3std12_String_baseCFv"
std::_String_base::_Xran( const(void))

奇怪的是_Xran似乎是VC std::string实施的一部分。

无论如何,您正在寻找的标题可能是#include <string>

编辑:由于c ++ filt的输出 - 你确定它是用VC ++编译的吗?

答案 1 :(得分:0)

如果string.h确实包含在某个地方,你可以找到:

在每个#include指令后面的下一行放置以下代码:

using namespace std;class string;struct{void hxtestfunc(void){typedef string hxtesttype;}};

编译时,只有在string.h(或任何直接或间接包含string.h的文件)包含在某处之前,才会生成“模糊符号”错误。

因此,第一次报告“模糊符号”错误将导致您在关键包含后立即行。

在Visual C ++中,您可以使用搜索和替换正则表达式:

替换

“{#包括。*}”

“\ 0 \ n使用命名空间std;类字符串; struct {void htestfunc(void){typedef string htesttype;}};”

整个项目。