编译错误“'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'类型重新定义”虽然它是它的第一个定义的主要内容,如果未能解决你的问题,请参考以下文章

检测到 Angular 编译器,但它是错误类的实例

使用-std = c ++ 11后,'stoi'未在此范围内声明

我在按书上编译python 源码时,老是提示错误,虽然输入正确,编译不成功(eclisp工具)

编译器未捕获未初始化的成员。它是一个错误吗?

我认为这是一个编译器错误,这不应该影响我的代码,但它是 [关闭]

Emscripten 无法编译着色器