【发布时间】:2013-10-26 08:46:15
【问题描述】:
我有一个事件处理函数,在该函数中调用了一个类的成员函数。事件处理函数在类 cpp 文件中声明,但不是类的一部分,它不是成员函数。
当我编译代码时,编译器说该函数在范围内是注释,因为它正在调用全局事件处理函数中的成员函数。
我的问题如下:有没有办法在全局函数中使用 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 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:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB/CommunicationModuleUSB.h:26:错误:成员“SendBuffer”上的额外限定“CommunicationModuleUSB::”。
有人知道谁来解决这个问题吗?
更新 2
再次感谢丹尼尔的回复!
我已根据您的反馈更改了成员功能。但现在我收到以下错误:
C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB\CommunicationModuleUSB.cpp:77: 错误:无法声明成员函数 'static void CommunicationModuleUSB::SendBuffer(uint8_t*, int)' 具有静态链接
我已在头文件中将 Connection 变量设为静态。下面是头文件和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文件中的函数声明:
static void CommunicationModuleUSB::SendBuffer(uint8_t* Buffer, int Size){
connection->write(Size,(uint8_t*)&Buffer);
}
以及全局函数中的调用:
CommunicationModuleUSB::SendBuffer(data, sizeof(data));
更新 3
我在 Daniel 的帮助下更新了代码,我现在唯一的问题是在类中声明的 Connection 变量不再在范围内。
我得到的编译器错误如下:
C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB/CommunicationModuleUSB.cpp:79: 未定义对CommunicationModuleUSB::connection'
C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB/CommunicationModuleUSB.cpp:79: undefined reference toCommunicationModuleUSB::connection 的引用
CommunicationModuleUSB\CommunicationModuleUSB.cpp.o:在函数CommunicationModuleUSB::Connect()':
C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB/CommunicationModuleUSB.cpp:53: undefined reference toCommunicationModuleUSB::connection'
C:\Users\Gebruiker\Documents\Arduino\libraries\CommunicationModuleUSB/CommunicationModuleUSB.cpp:53: undefined reference to `CommunicationModuleUSB::connection'
连接变量在头文件中声明如下:
// 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);
}
And 用于以下全局事件处理函数:
// 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));
}
有没有人建议如何解决这个问题?
【问题讨论】: