在我的一个课程中,我似乎无法摆脱这些看似随意的编译错误.我得到了4个错误,例如:
multiple definition of `draw_line(float, float, float, float)'
Run Code Online (Sandbox Code Playgroud)
和
multiple definition of `near_far_clip(float, float, float*, float*, float*, float*, float*, float*)'
Run Code Online (Sandbox Code Playgroud)
在方法中间标记的.
我也一直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)'
Run Code Online (Sandbox Code Playgroud)
和
multiple definition of `near_far_clip(float, float, float*, float*, float*, float*, float*, float*)'
Run Code Online (Sandbox Code Playgroud)
lines.cpp文件中的multiple definition of `stack'错误,但错误现在位于ThreeD.cpp文件中的随机位置(现在由注释标记).更新:此错误已得到修复,文件已修改为显示:
我搞砸了一些全局变量extern,但它似乎并没有影响任何东西.
str*_*ger 34
您可能在头文件中包含函数定义.包含inline关键字,以便它们不会被每个目标文件导出,或者将它们放在自己的.cpp文件中.
对于全局变量,您需要extern在头文件中使用关键字.否则,每个目标文件都会导出它们自己的变量,并且链接器会混淆哪个是正确的变量.
Tho*_*day 14
你为什么在ThreeD.cpp中#include lines.cpp?这很不寻常.
你的makefile需要lines.o,所以你要编译lines.cpp.lines.cpp中定义的任何内容都将在lines.o中以及ThreeD.o中.
在lines.cpp中有一个有趣的注释:
Don't forget to put declarations in your .h files.
Run Code Online (Sandbox Code Playgroud)
我认为教师希望你将lines.cpp分成.h和.cpp.
摘自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 *);
Run Code Online (Sandbox Code Playgroud)
我怀疑这两个声明是lines.h中应该唯一的.
| 归档时间: |
|
| 查看次数: |
92717 次 |
| 最近记录: |