很抱歉不得不问这个问题,但我很沮丧。我想这只是对C / C ++如何包含工作的简单误解。这是我的主文件中的内容:
#include "application.h"
#include "flashHelper.h"
#include <ePaper.h>
...
void setup()
{
SparkFlash_loadImage(image_270, sizeof(image_270), 0);
...
EPAPER.image_flash();
}
我最近将一些功能移到了flashHelper.cpp和flashHelper.h中
flashHelper.h
#ifndef FLASHHELPER_H
#define FLASHHELPER_H
int SparkFlash_read(int address);
int SparkFlash_write(int address, uint16_t value);
void SparkFlash_erase(int address, int bytesToErase);
bool SparkFlash_writeB(const uint8_t* buffer, int numByteToWrite, int extFlashOffset);
bool SparkFlash_checkB(const uint8_t* buffer, int numByteToCheck, int extFlashOffset);
bool SparkFlash_loadImage(const uint8_t* buffer, int bufferSize, int flashOffset);
#endif /* FLASHHELPER_H */
很明显,flashHelper.cpp具有定义的实际功能:
#include "flashHelper.h"
bool SparkFlash_loadImage(const uint8_t* buffer, int bufferSize, int flashOffset)
{
...
}
bool SparkFlash_checkB(const uint8_t* buffer, int numByteToCheck, int extFlashOffset)
{
...
}
bool SparkFlash_writeB(const uint8_t* buffer, int numByteToWrite, volatile int extFlashOffset)
{
...
}
void SparkFlash_erase(int address, int bytesToErase)
{
...
}
int SparkFlash_read(int address)
{
...
}
int SparkFlash_write(int address, uint16_t value)
{
...
}
当我编译时,出现以下错误:
../applications/e-paper/EPD.cpp:751:71: error: 'SparkFlash_read' was not declared in this scope
对我来说,意味着由EPAPER.image_flash()调用的函数无法访问/查看flashHelper.h中包含的函数。知道为什么吗?当我将flashHelper.h定义添加到application.h,然后将实际功能添加到我的主文件(application.cpp)时,它会编译而不会产生任何干扰。对于那些感兴趣。导致错误的函数/线路/调用如下所示:
void EPD_Class::line(uint16_t line, int extFlashAddress, uint8_t fixed_value, bool read_progmem, EPD_stage stage)
{
...
extFlashData = SparkFlash_read(extFlashAddress + i - 1);
...
}
最佳答案
在EPD.cpp
的顶部,添加以下行:
#include "flashHelper.h"
关于c++ - 包含的功能稍后在范围中不可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27408943/