两个返回相同值的 Arduino 类实例
Two Arduino class instances returning same values
我正在为 Uno 编写我的第一个代码,但在使用库时遇到了问题。 我创建了 GPSLocation 类(loc1 和 loc2)的两个实例来存储两个位置的纬度和隆。 当我为它们赋值,然后立即调用它们时,两个实例都持有相同的值,即我设置值的最后一个对象的值。 我已经看了几个小时了,看不出我做错了什么。
我的代码如下。任何帮助都会很棒。
Test.ino
void setup() {
Serial.begin(115200);
}
void loop() {
GpsLocation loc1;
loc1.setLat(-12.3456);
loc1.setLon(34.4567);
GpsLocation loc2;
loc2.setLat(-78.9123);
loc2.setLon(187.6325);
delay(1000);
Serial.print("Loc1: ");
Serial.print(loc1.getLat(), 4);
Serial.print(", ");
Serial.print(loc1.getLon(), 4);
Serial.print("n");
Serial.print("Loc2: ");
Serial.print(loc2.getLat(), 4);
Serial.print(", ");
Serial.print(loc2.getLon(), 4);
Serial.print("n");
}
GPSLocation.h
#ifndef GpsLocation_h
#define GpsLocation_h
#include "Arduino.h"
class GpsLocation
{
public:
GpsLocation();
void setLat(float lat);
void setLon(float lon);
float getLat();
float getLon();
};
#endif
全球定位系统.cpp
#include "Arduino.h"
#include "GpsLocation.h"
float latitude = 0.0;
float longitude = 0.0;
GpsLocation::GpsLocation(){}
void GpsLocation::setLat(float lat)
{
latitude = lat;
}
void GpsLocation::setLon(float lon)
{
longitude = lon;
}
float GpsLocation::getLat()
{
return latitude;
}
float GpsLocation::getLon()
{
return longitude;
}
这是串行监视器返回的内容
Loc1: -78.9123, 187.6325
Loc2: -78.9123, 187.6325
我更新了我的GPSLocation类,如下所示,解决了我的问题。 谢谢大家。
GPSLocation.h
#ifndef GpsLocation_h
#define GpsLocation_h
#include "Arduino.h"
class GpsLocation
{
public:
float latitude;
float longitude;
};
#endif
全球定位系统.cpp
#include "Arduino.h"
#include "GpsLocation.h"
设置和获取 Test.ino,如下所示
loc1.latitude = -12.3456;
Serial.print(loc1.latitude, 4);
初始代码的问题在于您已将变量定义为全局变量(在全局范围内),并且两个实例都可以访问它们,因此从任何实例应用于它们的最后一个值都会影响并且所有实例都可以访问。
通常,应避免使用全局变量,因为这被认为是一种不好的做法。
通过使变量成为非静态类成员,实际上使它们成为实例的"部分"。这样,从某种意义上说,每个Arduino实例都有自己的变量副本,您可以单独应用值。
更新:为了保留封装,最好将变量声明为私有,并通过 setter 和 getter 方法对它们进行访问。在维基上查看有关该概念的更多信息。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 如何在Arduino中创建另一个类库的实例变量
- 两个返回相同值的 Arduino 类实例
- 在 Arduino 环境中实例化类时串行通信不起作用
- Arduino C++ - 尝试实例化具有非类型模板参数的类时出错
- 自定义Arduino库未实例化
- 子类调用基类构造函数,然后使用子类Arduino c++中基类的实例方法
- 在新变量中存储类实例会导致奇怪的行为(Arduino Serial)