我似乎无法摆脱其中一个班级中这些看似随机的编译错误。我遇到了大约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),而对错误没有任何更改…

我没有重复的方法。#includelines.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*)'

行中的错误。cpp文件,但multiple definition of `stack'错误现在位于threed.cpp文件中的一个随机位置(现在由评论标记)。**Update:**此错误已修复,并且已修改了文件以显示以下内容:

我乱七八糟地标记了一些全球变量,但似乎并没有影响任何事情。

答案

为什么您#include lines.cpp in threed.cpp?这是非常不寻常的。

您的makefile想要行。cpp中定义的任何内容都将在行中,也将在threed.o中。

cpp中有一个有趣的评论:

Don't forget to put declarations in your .h files. 

我认为讲师希望您分解线路。

摘录摘自lines.cpp:

/* These go in your .h file or in lines.h */
/*

Line drawing header.

*/


void draw_line(float, float, float, float);
int near_far_clip(float, float, float *, float *, float *, float *,
                  float *, float *);

我怀疑这两个声明是唯一应该列入的。

来自: stackoverflow.com