我正在将用于死锁检测的MFC应用程序转换为Simple控制台应用程序。 在这个过程中,我发现许多错误,如
错误C2365:'CmdLockMutex':重新定义;先前的定义是'enumerator'
我无法删除此错误。 如果有人可以在这方面帮助我。
答案 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”