2017-08-27 109 views
2

Detector.cpp:訪問長從另一個類

#include "Detector.h" 

void detectorSniffer(uint8_t *buf, uint16_t len) { 
    if(buf[12] == 0xA0 || buf[12] == 0xC0) { 
    c++; //Failing to read C long in the detector class 
    } 
}; 

void Detector::start() { 
    Serial.print("start"); 
} 

Detector.h

#include <ESP8266WiFi.h> 
#include "Mac.h" 

class Detector { 
    public: 
    void start(); 
    unsigned long c = 0; // Variable 
}; 

我試圖從detectorSniffer()訪問的Detector類無符號長變量功能。我試過Detector dd.c等等。我究竟做錯了什麼?

回答

3

如果你想修改類(成員)變量,你必須首先創建這個類的一個實例。

那麼最好的辦法就是設置detectorSniffer爲方法(或友元函數)Detector類的,在這之後,你可以訪問&從detectorSniffer修改其成員變量。

void Detector::detectorSniffer(uint8_t *buf, uint16_t len) 
{ 
    if(buf[12] == 0xA0 || buf[12] == 0xC0) { 
    c++; 
    } 
}; 

// Calling 
Detector d; 
d.start(); 
d.detectorSniffer(/*parameters*/); 

或通過參考的Detector

void Detector::detectorSniffer(uint8_t *buf, uint16_t len, Detector & d) { 
    if(buf[12] == 0xA0 || buf[12] == 0xC0) { 
    d.c++; //Failing to read C long in the detector class 
    } 
}; 

// Calling 
Detector d; 
d.start(); 
detectorSniffer(/*some parameters*/, d); 
+0

一個實例,或使detectorSniffer探測器類的成員方法(雖然不從設計的角度來看知道作者的意圖) – Sil

+1

那爲什麼有*或* ... –

+0

哎呀,我誤解了你的答案。對不起:P – Sil