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