编译错误“'struct'类型重新定义”虽然它是它的第一个定义
Posted
技术标签:
【中文标题】编译错误“\'struct\'类型重新定义”虽然它是它的第一个定义【英文标题】:Compile error "'struct' type redefinition" although it's the first definition for it编译错误“'struct'类型重新定义”虽然它是它的第一个定义 【发布时间】:2011-04-28 21:12:21 【问题描述】:一切正常,直到我将一些代码从主文件移动到新类,然后出现以下错误:
错误 C2011: 'color1' : 'struct' 类型重新定义
struct color1
color1()
red = green = blue = 0;
color1(float _red, float _green, float _blue)
red = _red;
green = _green;
blue = _blue;
float red, green, blue;
;
有什么想法吗?
【问题讨论】:
参见例如***.com/questions/2979384/purpose-of-header-guards 它可能在一个被包含两次的文件中。将编译指示守卫添加到它所在的文件中。 显然,您的程序还有更多内容。您能否将您的程序缩减为显示您看到的错误的最小完整程序,然后在此处发布该程序? ... 使用构造函数初始化列表,Luke ... 【参考方案1】:如果编译器说它被重新定义了,那么它可能是。
我的心理调试技能告诉我,您将结构从源文件移动到头文件,而忘记了该头中的包含保护,然后在源文件中包含多次。
编辑:作为一般规则,我通常建议避免使用前导下划线。在某些情况下(例如后跟大写字母),它们是为实现而保留的,最简单的方法是永远不要使用前导 _
而不是希望您记住所有规则。
【讨论】:
+1 表示可能的答案,另一个 +1 表示下划线建议。不幸的是,总体上限为 +1。 +1 建议避免使用前导下划线。由于我不清楚的原因,我看到很多程序员继续使用这些名称,而类似的方法(但总是合法且危险性较小)例如在末尾添加它们。【参考方案2】:从上面的 sn-p 中我无法推断出有什么问题。
但通常此错误意味着您多次包含相同的头文件。你不会忘记为包含文件添加标准保护吗?
#ifndef MY_HEADER_FILE_
#define MY_HEADER_FILE_
// here is your header file code
#endif
【讨论】:
@Oli Charlesworth:我看过上面的答案,这听起来很合理。还将从我自己的代码中删除它们))【参考方案3】:您可以在头文件中定义结构。 有
#pragma once
在定义结构的头部的开头,它解决了问题。
【讨论】:
【参考方案4】:我遇到了同样的问题,幸运的是没过多久就发现这只是一个愚蠢的错误。
问题是我在另一个驱动器 (D:) 上备份了我的项目,但是当明确定义完整路径时,所有代码都设置在驱动器 C: 上。我在 C: 路径上创建它并且一直使用这种方式,但不小心从 D 中打开项目并认为它是同一件事,所以在编译时它包含了两次,因为在某些情况下它包含了来自C: 路径和其他从 D: 路径。
【讨论】:
【参考方案5】:我也遇到了同样的问题,结果我的头球后卫犯了一个错误。例如,不要写:
#ifndef COMMAND_H
#define COMMAND_H
// My code
#endif // COMMAND_H
我犯了一个有点难以辨认的错字:
#ifndef COMNAND_H
#define COMMAND_H
// My code
#endif // COMMAND_H
也就是说,COMNAND_H 不是 COMMAND_H。它应该是字母 M 而不是字母 N。我解决了这个问题,一切都很好。希望这个答案对您的案子有帮助!!!
【讨论】:
以上是关于编译错误“'struct'类型重新定义”虽然它是它的第一个定义的主要内容,如果未能解决你的问题,请参考以下文章
使用-std = c ++ 11后,'stoi'未在此范围内声明
我在按书上编译python 源码时,老是提示错误,虽然输入正确,编译不成功(eclisp工具)