C++静态枚举类成员的"多重定义"编译错误
C++ 'multiple definition' compile error with static enum class members
这是一个在Visual Studio中编译的Arduino项目(使用Visual Micro插件)。我收到以下错误:
autonomyhandler.cpp.o(插件的符号):在函数自动handler :: setup()const (.Text 0x0):模块的多重定义:: availablecommandkeys arduinoproject.cpp.o(插件的符号)*:(.text 0x0):首先在此处定义
我在类定义中使用枚举cmdkeys,我可以使用下面的代码行来获取可用的键,但是当我尝试使用它时,我会得到多个编译错误,如上所述,每个键我使用过的地方。
Module::AvailableCommandKeys
我的 Module.h 外观如下:
#ifndef _MODULE_h
#define _MODULE_h
class Module {
public:
enum CmdKeys { Forward, Left, Back, Right, Stop };
static const CmdKeys AvailableCommandKeys[2];
// other definitions...
};
const Module::CmdKeys Module::AvailableCommandKeys[] = { Forward, Back };
#endif
有人知道发生了什么吗?我以前有这个问题,使成员非静态问题解决了问题,但我想保持这些枚举阵列静态。
自写这篇文章以来,我找到了答案,所以我认为我会发帖以帮助他人。
要解决问题,您只需要将静态成员的初始化从定义文件(.h)移动到声明文件(.cpp)
模块外观如下:
#ifndef _MODULE_h
#define _MODULE_h
class Module {
public:
enum CmdKeys { Forward, Left, Back, Right, Stop };
static const CmdKeys AvailableCommandKeys[2];
// other definitions...
}
const Module::CmdKeys Module::AvailableCommandKeys[] = { Forward, Back };
#endif
Module.CPP 外观如下:
#include "Module.h"
const Module::CmdKeys Module::AvailableCommandKeys[] = { Forward, Back };
// Other code...
将行:const模块:: cmdkeys模块:: availablecommandkeys [] = {向前,返回};
在.cpp文件中。
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?