[英]C++ 'multiple definition' compile error with static enum class members
這是在Visual Studio中編譯的Arduino項目(使用可視化微型插件)。 我收到以下錯誤:
AutonomyHandler.cpp.o(來自插件的符號) :在函數AutonomyHandler :: setup()const(.text + 0x0) :Module :: 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)
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...
放置以下行:const Module :: CmdKeys Module :: AvailableCommandKeys [] = {Forward,Back};
在.cpp文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.