这是一个在Visual Studio中编译的Arduino项目(使用visual micro plugin)。我收到以下错误:
AutonomyHandler.cpp.o (symbol from plugin): In function AutonomyHandler::setup() const (.text+0x0): multiple definition of Module::AvailableCommandKeys ArduinoProject.cpp.o (symbol from plugin)*: (.text+0x0): first defined here
我在类定义中使用 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)
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...
}
<b><s>const Module::CmdKeys Module::AvailableCommandKeys[] = { Forward, Back };</s></b>
#endif
Module.cpp 如下所示:
#include "Module.h"
<b>const Module::CmdKeys Module::AvailableCommandKeys[] = { Forward, Back };</b>
// Other code...
关于C++ 'multiple definition' 静态枚举类成员编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47823215/