簡體   English   中英

具有靜態枚舉類成員的C ++“多個定義”編譯錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM