很抱歉不得不问这个问题,但我很沮丧。我想这只是对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/

10-11 11:39