我开始用 C++ 编写一个简单的解释器,它的类结构将在下面描述,但我退出并用 Java 重写了这个东西,因为头文件让我很难过。这是 C++ 中显然不允许的基本结构:
main.cpp包含 main 函数,并包含一个我们可以调用 print.h 的类的标头(其单个 void 方法在printer.cpp中实现)。现在想象另外两个相同的类。两者都想调用Printer::write_something();
,所以我在每个中都包含了printer.h。所以这是我的第一个问题:为什么我可以#include <iostream>
一百万次,甚至一个接一个,但我只能包括我的标头一次?(好吧,我想我可以用我的做同样的事情,只要它在同一个文件中。但我可能是错的。)我理解声明和实现/定义之间的区别,但该代码给了我一个类重定义错误。我不明白为什么。这就是让我大吃一惊的事情(可能会告诉你为什么我什么都不明白):我不能只在main.cpp的顶部包含print.h并使用我其他两个类中的类。我知道我可以毫无问题地将printer.h包含在两个类(标题)之一中,但我不明白为什么这与在将类包含在main.cpp之前包含它有什么不同(因为这样做会给出我一个类没有找到错误)。
当我厌倦时,我考虑转向 C,因为我使用的 OOP 无论如何都非常强制,但是除非我将所有内容都写在一个文件中,否则我会遇到同样的问题。了解 C++ 但由于编译问题而无法正确使用它令人沮丧。
如果您能帮我解决这个问题,我将不胜感激。谢谢!