我有一個事件處理函數,並且在該函數中有一個對類的成員函數的調用。事件處理函數是在類cpp文件中聲明的,但不是類的一部分,它不是成員函數。在聲明對象之前在全局函數中使用class的成員函數
當我編譯代碼時,編譯器說這個函數是在範圍中註釋的,因爲它調用了全局事件處理函數中的成員函數。
我的問題是:有沒有辦法在全局函數中使用meber函數? (該對象在運行時首先創建)。
下面是成員函數和全局事件處理程序:
Global event handler:
void adbEventHandler(Connection * connection, adb_eventType event, uint16_t length, uint8_t * data)
{
Serial.println("In data recieve handler");
Serial.println("Data recieved: ");
Serial.println(data[0]);
Serial.println(data[1]);
char a = data[0];
char b = data[1];
Serial.println(a);
Serial.println(b);
//uint16_t data2 = data;
// Member function of USBCommunicator class
SendBuffer(data, sizeof(data));
}
成員函數:
void CommunicationModuleUSB::SendBuffer(uint8_t * Buffer, int Size){
connection->write(Size,(uint8_t*)&Buffer);
}
更新
與丹尼爾的回覆(謝謝! )我將頭文件和cpp文件中的成員函數更改爲static,如下所示:
static void CommunicationModuleUSB::SendBuffer(uint8_t* Buffer, int Size);
而作爲跟隨函數被調用的全球事件處理程序:
// Event handler for shell connection; called whenever data sent from Android to Microcontroller
void adbEventHandler(Connection * connection, adb_eventType event, uint16_t length, uint8_t * data)
{
Serial.println("In data recieve handler");
Serial.println("Data recieved: ");
//Serial.println(*data);
Serial.println(data[0]);
Serial.println(data[1]);
char a = data[0];
char b = data[1];
Serial.println(a);
Serial.println(b);
//uint16_t data2 = data;
CommunicationModuleUSB::SendBuffer(data, sizeof(data));
}
只有現在我得到以下錯誤,當我編譯:
C:\用戶\ Gebruiker \文件\ Arduino \ libraries \ CommunicationModuleUSB/CommunicationModuleUSB.h:26:錯誤:成員'SendBuffer上的額外資格'CommunicationModuleUSB ::'。
有誰知道誰來解決這個問題?
更新2
再次感謝丹尼爾的回覆!
我已將您的反饋更改爲成員函數。但現在我得到以下錯誤:
C:\ Users \ Gebruiker \ Documents \ Arduino \ libraries \ CommunicationModuleUSB \ CommunicationModuleUSB.cpp:77:錯誤:無法聲明成員函數'靜態void CommunicationModuleUSB :: SendBuffer(uint8_t *, int)'有靜態鏈接
我已經使頭文件中的連接變量靜態。 Bellow是頭文件和函數deffenition形成cpp文件。
你(或其他人)有任何線索嗎?歡迎所有建議!
頭文件
#include "CommunicationModule.h"
#include <SPI.h>
#include <Adb.h>
class CommunicationModuleUSB : public CommunicationModule
{
public:
CommunicationModuleUSB();
int Connect();
void Send();
int CheckConnection();
void Recieve();
static void SendBuffer(uint8_t* Buffer, int Size);
void RecieveBuffer(char Buffer[], int Size);
// Adb connection made this static....(is this right?
static Connection * connection;
// Elapsed time for sensor sampling
long lastTime;
private:
};
在cpp文件的功能decleration:
static void CommunicationModuleUSB::SendBuffer(uint8_t* Buffer, int Size){
connection->write(Size,(uint8_t*)&Buffer);
}
並在全局函數調用:
CommunicationModuleUSB::SendBuffer(data, sizeof(data));
更新3
我已更新te代碼在Daniel的幫助下,現在唯一的問題是在類中聲明的Connection變量不在範圍內。
編譯器錯誤,我得到的是如下: C:\用戶\ Gebruiker \文件\ Arduino的\庫\ CommunicationModuleUSB/CommunicationModuleUSB.cpp:79:未定義參照CommunicationModuleUSB::connection' C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB/CommunicationModuleUSB.cpp:79: undefined reference to
CommunicationModuleUSB ::連接」 CommunicationModuleUSB \ CommunicationModuleUSB。 cpp.o:在功能CommunicationModuleUSB::Connect()': C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB/CommunicationModuleUSB.cpp:53: undefined reference to
CommunicationModuleUSB ::連接 ' C:\用戶\ Gebruiker \文件\ Arduino的\庫\ CommunicationModuleUSB/CommunicationModuleUSB.cpp:53:未定義參考`CommunicationModuleUSB ::連接'
連接可變在頭文件中聲明如下:
// Adb connection made this static....(is this right?
static Connection * connection;
變量將在下面的成員函數使用:
void CommunicationModuleUSB::SendBuffer(uint8_t* Buffer, int Size){
connection->write(Size,(uint8_t*)&Buffer);
}
並且在以下全局事件處理功能用於:
// Event handler for shell connection; called whenever data sent from Android to Microcontroller
void adbEventHandler(Connection * connection, adb_eventType event, uint16_t length, uint8_t * data)
{
Serial.println("In data recieve handler");
Serial.println("Data recieved: ");
Serial.println(data[0]);
Serial.println(data[1]);
char a = data[0];
char b = data[1];
Serial.println(a);
Serial.println(b);
CommunicationModuleUSB::SendBuffer(data, sizeof(data));
}
Doe的人有一個建議如何解決這個?
@ Daniel:感謝您的評論。當我將該函數更改爲靜態時,出現以下編譯器錯誤。 C:\ Users \ Gebruiker \ Documents \ Arduino \ libraries \ CommunicationModuleUSB/CommunicationModuleUSB.h:26:錯誤:成員'SendBuffer'上額外限定'CommunicationModuleUSB ::'。我在uptdate下發布了更改: – Roy08
對不起,我犯了一個錯誤(或者我的解釋不清楚)。你需要聲明這個方法是靜態的,你不需要把'CommunicationModuleUSB ::'放在前面。檢查我的答案(一秒鐘) –
@ Danliel:再次感謝您的回覆。我用你的反饋,但沒有我得到以下錯誤:C:\ Users \ Gebruiker \ Documents \ Arduino \庫\ CommunicationModuleUSB \ CommunicationModuleUSB.cpp:77:錯誤:無法聲明成員函數'靜態無效CommunicationModuleUSB :: SendBuffer(uint8_t *, int)'有靜態鏈接。我將Connection更改爲static。我更新了我的代碼,更新2 – Roy08