其他分享
首页 > 其他分享> > C类重新定义错误-帮助我了解标题和链接

C类重新定义错误-帮助我了解标题和链接

作者:互联网

我开始用C语言编写一个简单的解释器,该类结构将在下面描述,但是我退出并重写了Java语言中的内容,因为标头给了我很大的麻烦.这是C显然不允许的基本结构:

main.cpp包含main函数,并包含我们可以称为printer.h的类的头(其单个void方法在printer.cpp中实现).现在想象一下其他两个相同的类.两者都想调用Printer :: write_something();,所以我都在其中包含了printer.h.所以这是我的第一个问题:为什么我可以#include< iostream>一百万次,甚至一个接一个,但是我只能包含一次标题吗? (好吧,只要它在同一个文件中,我想我就可以对我做同样的事情.但是我可能错了.)我理解声明和实现/定义之间的区别,但是该代码给了我一个类重新定义错误.我不明白为什么.这就是让我大吃一惊的事情(并且可能向您展示了为什么我不理解其中的任何内容):我不能只在main.cpp的顶部包含printer.h并使用其他两个类中的类.我知道我可以毫不费力地将Printer.h包含在两个类(标头)之一中,但是我不明白为什么这与在将类包含在main.cpp中之前只包含它没有什么不同(因为这样做可以我一个类未找到错误).

当我受够了时,我一直想迁移到C,因为我正在使用的OOP还是被迫执行,但是除非将所有内容都写到一个文件中,否则我将遇到相同的问题.知道C令人沮丧,但由于编译问题而无法正确使用它.

如果您能为我解决这个问题,我将不胜感激.谢谢!

解决方法:

Why can I #include a million times, even one after the other, but I can only include my header once?

可能是因为标头没有include guard.

// printer.h file
#ifndef PRINTER_H_
#define PRINTER_H_

 // printer.h code goes here

#endif

请注意,最佳做法是为包含保护定义选择更长的名称,以最小化两个不同的标头可能具有相同的标头的机会.

标签:c,linker,header,redefinition
来源: https://codeday.me/bug/20191012/1899492.html