簡體   English   中英

Arduino 中的 C++ 創建 class 的實例

[英]C++ in Arduino create instances of class

如何創建 class 的多個實例?

我想要幾個類,都像 C# 中的接口,使用相同的結構但有不同的實例。

如果我啟動以下構造,它會告訴我錯誤,class 沒有實例化的“KEY”。

我正在使用 struct StateController但它只是為了顯示環境,問題已經在String Key中。

基數.h

    #ifndef _BASE_H
#define _BASE_H
#include <Arduino.h>
#include "StateController.h"

class _Base
{
public:
    _Base();
    void Init(StateController *stateController);
    void Update(StateController *stateController);

private:
    String Key;
};

extern _Base _BaseInstance;
#endif

主文件

void setup()
{
// Here I can only access the _BaseInstance. 
// If I create a h file for each Class1.h/Class2.h/Class3.h I can access
// But throws exception because "Key" has multiple definitions.
  Class1.Init(&stateController);
  Class2.Init(&stateController);
  Class3.Init(&stateController);
}

_Base.cpp

#include "StateController.h"
#include <Arduino.h>
#include "_Base.h"

//
//
//


StateItem stateItem;

_Base::_Base()
{
    Key = "Class 1";
}

void _Base::Init(StateController *stateController)
{
    stateItem = stateController->Add(Key);
}

void _Base::Update(StateController *stateController)
{
}

(問題已更新詳細信息)

很難知道發生了什么,因為您沒有共享 Class1.h、Class2.h 和 Class3.h 中的代碼,也沒有向我們展示 Class1、Class2 和 Class3 的聲明位置。 這三個對象本身是從_Base 繼承的類的實例嗎? 或者它們只是 _Base 的實例? 您需要多態性,還是僅使用 _Base class 就足夠了?

聽起來您可能會將對多態性的需求與對同一 class 的不同實例的需求混為一談,您的代碼可能會反映這一點。

將構造函數更改為采用單個 String 參數,然后將其分配給 Key 就足夠了嗎? 您可以執行以下操作:

基數.h

#ifndef _BASE_H
#define _BASE_H
#include <Arduino.h>
#include "StateController.h"

class _Base
{
public:
    _Base(String _Key);
    void Init(StateController *stateController);
    void Update(StateController *stateController);

private:
    String Key;
};

extern _Base _BaseInstance;
#endif

然后將構造函數定義為:

基數.cpp

_Base::_Base(String _Key) :
    Key(_Key) {}

然后相應地初始化各個對象:

主文件

_Base Class1 ("Class 1");
_Base Class2 ("Class 2");
_Base Class3 ("Class 3");

void setup()
{
  Class1.Init(&stateController);
  Class2.Init(&stateController);
  Class3.Init(&stateController);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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