【发布时间】:2015-03-06 23:44:45
【问题描述】:
我有这样的代码结构
myobj.h
#pragma once
struct myobj {
myobj();
...
} Myobj;
myobj.cpp
#include "myobj.h"
myobj::myobj() { ... }
...
mysketch.ino
#include "myobj.h"
Myobj.someMethod();
...
我知道这行不通,因为 Arduino IDE 分别编译每个文件,所以 #pragma once 不会帮助我避免链接阶段的多重定义错误(Myobj 被创建了两次)。
我不想打扰我未来库的用户自己创建全局对象(无论如何,该对象将用作单例)。工作思路是使用宏:
myobj.h
#pragma once
struct myobj {
myobj();
...
};
#ifndef _MYOBJ_
myobj Myobj;
#endif
myobj.cpp
#define _MYOBJ_
#include "myobj.h"
myobj::myobj() { ... }
...
但是我必须记住在除 ino 文件之外的任何地方定义此宏。很高兴检测到 myobj.h 包含在具有设置和循环功能的 .ino 文件中。是否可以在该 ino 文件中不添加任何额外代码的情况下进行这种检测?有没有其他方法可以在库中定义全局对象?
当我查看其他库(如 Servo)时,在 ino 示例中创建了全局对象。我可以忍受,但是有像Serial 这样的对象是自动创建的,我想知道如何。
【问题讨论】:
标签: c++ object arduino header-files arduino-ide