C ++'多重定义'编译错误与静态枚举类成员

时间:2017-12-14 22:40:09

标签: c++ enums static arduino

这是在Visual Studio中编译的Arduino项目(使用可视化微插件)。我收到以下错误:

  

AutonomyHandler.cpp.o(来自插件的符号):在函数AutonomyHandler :: setup()const中   (.text + 0x0):Module :: AvailableCommandKeys的多重定义   ArduinoProject.cpp.o(来自插件的符号)* :(。text + 0x0):首先在这里定义

我在类定义中使用了一个CmdKeys枚举,我可以使用下面的代码行来获取可用的键集,但是当我尝试使用它时,我会得到多个编译错误,如上所示这个地方我用过它。

67108864

我的 Module.h 如下所示:

Module::AvailableCommandKeys

有谁知道发生了什么?我以前遇到过这个问题并且让非静态成员修复了这个问题,但是我想让这些枚举数组保持静态。

2 个答案:

答案 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文件中。