重新定义错误

时间:2010-06-11 14:22:03

标签: c++

我正在将用于死锁检测的MFC应用程序转换为Simple控制台应用程序。 在这个过程中,我发现许多错误,如

错误C2365:'CmdLockMutex':重新定义;先前的定义是'enumerator'

我无法删除此错误。 如果有人可以在这方面帮助我。

4 个答案:

答案 0 :(得分:5)

好的4年后到OP这里是你的答案......

问题: 使用无范围的枚举,您可以遇到这种情况:

enum Suit { Diamonds, Hearts, Clubs, Spades };
enum Tools { Picks, Shovels, Spades, Hammers }; // error C2365: 'Spades' : 
                                                // redefinition; previous definition was 'enumerator'

解决方案:

Scoped enums solve this problem:
enum class Suit { Diamonds, Hearts, Clubs, Spades };
enum class Tools { Picks, Shovels, Spades, Hammers };

来源: MSDN

  

在枚举定义中使用关键字class或struct表示   每个枚举类型都是唯一的,与其他枚举类型无法比较。   除了这个优势,您还可以向前声明它们   没有指定基础类型(就像使用未编组的枚举一样)   如果你打算转发声明)。

答案 1 :(得分:4)

听起来您需要在CmdLockMutex的定义周围添加标题保护(在其.h文件的顶部添加#pragma once。)。或者说你有一个命名冲突。

也许你有这样的事情:

enum MyEnum { MyEnumVal1, MyEnumVal2 };

//....

class MyEnum
{

};

答案 2 :(得分:1)

我遇到过这样的问题,其中一些代码定义放在头文件中。标题包含在两个地方,因此与自身发生冲突。我的解决方案是将它们移动到自己的cpp文件中。你可能会看到这样的事情。

另一个原因可能是未能使用#pragma一次或在标题中使用#ifndef技术进行换行。

答案 3 :(得分:0)

显而易见的答案是,您经常使用名称CmdLockMutex - 可能在enum中。搜索您的代码,查找“CmdLockMutex”

的所有发生情况