对简单 Arduino 类进行故障排除
Troubleshooting Simple Arduino Class
我正在尝试让一个简单的类库为Arduino工作,并且正在努力。
图书馆 - .h
#ifndef ADS1X15_h
#define ADS1X15_h
#include "Arduino.h"
class ADS1X15
{
protected:
public:
ADS1X15 ();
void begin(uint8_t i2cAddress);
uint8_t m_i2cAddress;
uint8_t m_test;
private:
};
#endif
图书馆.cpp
#include "Arduino.h"
#include "ADS1X15.h"
ADS1X15::ADS1X15() {
uint8_t m_i2cAddress;
uint8_t m_test = 99;
}
void ADS1X15::begin(uint8_t i2cAddress) {
uint8_t m_i2cAddress = i2cAddress;
}
呼叫草图
#include <ADS1X15.h>
ADS1X15 ads;
void setup(void) {
Serial.begin(9600);
ads.begin(66);
}
void loop(void) {
Serial.print("Test1 ");
Serial.println(ads.m_i2cAddress);
Serial.print("Test2 ");
Serial.println(ads.m_test);
while (1==1) {}
}
似乎上面应该打印 99 和 66 而不是 0 和 0?!?!
提前谢谢。
这是
不正确的:
ADS1X15::ADS1X15() {
uint8_t m_i2cAddress;
uint8_t m_test = 99;
}
它向构造函数声明两个与类成员名称匹配的局部变量。 您在ADS1X15::begin
中也有类似的错误。 如果启用了警告,则应该会收到有关局部变量隐藏成员变量或类似变量的警告。
重写没有类型声明的那些,它们将更新你的类,而不是将局部变量更新到方法中。
ADS1X15::ADS1X15() {
m_test = 99;
}
void ADS1X15::begin(uint8_t i2cAddress) {
m_i2cAddress = i2cAddress;
}
在你的 cpp 中:
ADS1X15::ADS1X15() {
uint8_t m_i2cAddress;
uint8_t m_test = 99;
您正在重新声明公共成员,因此当您引用 INSIDE 构造函数时,您正在访问私有副本而不是公共类成员。
只需使用:
ADS1X15::ADS1X15() {
m_test = 99;
}
void ADS1X15::begin(uint8_t i2cAddress) {
m_i2cAddress = i2cAddress;
}
相关文章:
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- 针对代码::块设置的 SFML 故障排除
- 对"无效的抽象返回类型"进行故障排除
- 需要帮助对内存泄漏源进行故障排除 - C++
- 使用许多嵌套的#include语句对编译器错误进行故障排除
- 仅制作一列qtreewidget可编辑//故障排除
- 如果说明故障排除
- Ole 拖放故障排除
- 对简单 Arduino 类进行故障排除
- 强名称dll-如何进行故障排除
- C++:使用嵌套的 if/else 语句循环进行故障排除
- 对我的 c++ 程序进行故障排除
- OpenCV 3.0 源代码安装故障排除
- C++对我的命令行计算器进行故障排除
- C++:对循环进行故障排除
- 如何对CMake构建的不可复制SegFault进行故障排除
- 简单的暴力故障排除
- 故障排除delete[](损坏的未排序块)
- 故障排除_mkdir故障