我开始用 C++ 编写一个简单的解释器,它的类结构我将在下面描述,但我退出并用 Java 重写了这个东西,因为头给我带来了困难。这是 C++ 中显然不允许的基本结构:
main.cpp 包含 main 函数并包含一个类的头文件,我们可以调用 printer.h (其单个 void 方法在 printer.cpp 中实现)。现在想象另外两个相同的类。两者都想调用 Printer::write_something();
,所以我在每个中都包含了 printer.h 。所以这是我的第一个问题:为什么我可以 #include <iostream>
一百万次,甚至一个接一个,但我只能包含我的标题一次? (嗯,我想我可能可以用我的做同样的事情,只要它在同一个文件中。但我可能是错的。)我理解声明和实现/定义之间的区别,但该代码给了我一个类重定义错误。我不明白为什么。这是让我大吃一惊的事情(并且可能向您展示了为什么我不明白其中的任何一个):我不能只在 的顶部包含 printer.h main.cpp 并使用我的类另外两个类。我知道我可以在两个类(标题)之一中包含 printer.h 没有问题,但我不明白为什么这与在我将类包含在 main.cpp (因为这样做给了我一个找不到类的错误)。
当我受够了时,我考虑转移到 C,因为我使用的 OOP 无论如何都非常被迫,但除非我将所有内容都写在一个文件中,否则我会遇到同样的问题。知道 C++ 但由于编译问题而无法正确使用它是令人沮丧的。
如果您能帮我解决这个问题,我将不胜感激。谢谢!
最佳答案
这可能是因为您的标题没有 include guard 。
// printer.h file
#ifndef PRINTER_H_
#define PRINTER_H_
// printer.h code goes here
#endif
请注意,最佳做法是为包含保护定义选择更长的名称,以最大程度地减少两个不同 header 可能具有相同 header 的机会。
关于C++ 类重定义错误 - 帮助我理解标题和链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14485215/