这是在Visual Studio中编译的Arduino项目(使用可视化微插件)。我收到以下错误:
AutonomyHandler.cpp.o(来自插件的符号):在函数AutonomyHandler :: setup()const中 (.text + 0x0):Module :: AvailableCommandKeys的多重定义 ArduinoProject.cpp.o(来自插件的符号)* :(。text + 0x0):首先在这里定义
我在类定义中使用了一个CmdKeys枚举,我可以使用下面的代码行来获取可用的键集,但是当我尝试使用它时,我会得到多个编译错误,如上所示这个地方我用过它。
67108864
我的 Module.h 如下所示:
Module::AvailableCommandKeys
有谁知道发生了什么?我以前遇到过这个问题并且让非静态成员修复了这个问题,但是我想让这些枚举数组保持静态。
答案 0 :(得分:1)
自写这篇文章后,我找到了答案,所以我想我会发帖帮助别人。
要解决此问题,您只需将静态成员的初始化从定义文件(.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...
}
const Module::CmdKeys Module::AvailableCommandKeys[] = { Forward, Back };
#endif
Module.cpp 如下所示:
#include "Module.h"
const Module::CmdKeys Module::AvailableCommandKeys[] = { Forward, Back };
// Other code...
答案 1 :(得分:0)
放置线: const Module :: CmdKeys Module :: AvailableCommandKeys [] = {Forward,Back};
在.cpp文件中。