我似乎无法在我的一门课程中摆脱这些看似随机的编译错误。我收到大约 4 个错误,例如:
multiple definition of `draw_line(float, float, float, float)'
和
multiple definition of `near_far_clip(float, float, float*, float*, float*, float*, float*, float*)'
在方法中间标记的。
我也一直在另一种方法的中间得到 multiple definition of `stack'
。 stack
是完全不同文件中的全局变量。我收到错误的文件中甚至都没有提到它。
我尝试将容易出错的文件分成 .h 和 .cpp 文件(最初只是一个 .cpp),但没有任何关于错误的改变……
我没有重复的方法。我只有一个 #include
的lines.h,并且开头有一个 #ifndef
子句。所有这些错误都出现在 .cpp 文件中。
有什么想法吗?
好吧,我得到了代码:
lines.cpp 是我从导师那里收到的转换后的 .c 文件。我包含了 makefile 以防万一,因为我总是遇到问题。我还准确地注释了文件中错误标记的位置,但它们看起来很随机,所以我不知道它是否特别重要。我放弃了 .h 文件,因为它没有解决任何问题或提供帮助。我相信没有它会更容易找到错误。
这是请求的 main.cpp 文件(没有 .h)。
我重新制作了lines.h文件,因为我仍然收到:
multiple definition of `draw_line(float, float, float, float)'
和
multiple definition of `near_far_clip(float, float, float*, float*, float*, float*, float*, float*)'
lines.cpp 文件中的错误,但 multiple definition of `stack'
错误现在位于 ThreeD.cpp 文件中的随机位置(并且现在由注释标记)。 更新: 此错误已得到修复,文件已修改为显示:
我搞砸了一些全局变量 extern 的标签,但它似乎没有影响任何东西。
原文由 Chad 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么要在 ThreeD.cpp 中 #includelines.cpp?这是非常不寻常的。
你的makefile 需要lines.o,所以你要编译lines.cpp。在lines.cpp 中定义的任何内容都将在lines.o 和ThreeD.o 中。
在lines.cpp 中有一个有趣的评论:
我认为讲师希望您将lines.cpp 分解为.h 和.cpp。
摘自lines.cpp:
我怀疑这两个声明是应该在lines.h 中的唯一内容。