用c ++编程时, 大多数时候我得到'某个符号'已经被定义了 参见先前对'某些符号'的定义
我认为这是因为包含了不正确的头文件顺序。
我怎样才能找到'某些符号'的所有定义
提前致谢, 乌代
编辑:
我正在使用visual studio 我记得一些命令像dumpbin / exports(我不记得确切)得到所有的定义
答案 0 :(得分:7)
这通常是由于一些常见问题而发生的:
我会开始尝试修复第二个问题。确保所有标题都包含防护,这样如果您从不同的地方包含它们,它将不会尝试重新定义符号:
#ifndef HEADER_FILE_NAME_GUARD // or something alike
#define HEADER_FILE_NAME_GUARD
// rest of file
#endif
如果您需要订购包含,那么您将在以后遇到麻烦,确保您可以并且确实在所有地方包含所有依赖项。 (或者如果可以的话,转发声明)
答案 1 :(得分:4)
全文搜索是最跨平台的跨环境和高效技术。
答案 2 :(得分:2)
如果你使用安装了Visual Assist的Visual Studio,alt-G会弹出一个列出所有定义内容的地方。
答案 3 :(得分:2)
如果您使用安装了Visual Assist的Visual Studio,最好按Alt + X,然后按D查看符号的所有引用
答案 4 :(得分:2)
将C ++翻译成executbale有两个步骤。在第一步中,编译器通过输入线性工作(通常是.cpp文件和它们包含的头文件)。在步骤2中,链接器组合了步骤1的结果。
从“之前定义的符号”的描述中,我得出结论,问题必须发生在.cpp文件中,因为它们是线性处理的。 dumpbin / exports适用于步骤1的输出,您可能不会这样做。标题包含可能是罪魁祸首,因为这是编译的早期阶段。您想要预处理的输入。 IIRC,你可以用/ EP开关来实现。
答案 5 :(得分:1)
如果您需要订购包含,则首先表示“代码嗅觉”。最有可能的是,您的代码设计得不够好。所有常用代码都应该是单独的package / dll / lib(无论如何)的一部分,并且应该从那里包含/链接。
如果您使用的是C ++ / VC ++,这通常会在您包含cpp& h文件直接来自其他项目,而不是链接到某种实用程序库。
正如有人已经指出的那样,如果你必须忍受它,文本搜索是最好的选择,但尝试以更好的方式重新设计代码(如果可以的话)。
答案 6 :(得分:0)
通常我只是grep头文件。