包含的功能稍后在范围内不可用

时间:2014-12-10 19:08:39

标签: c++ c

我很抱歉不得不问这个,但我很难过。我想这只是对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)时,它编译时没有任何抗议。

对于那些感兴趣的人。导致错误的函数/ line / call看起来像:

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);
    ...
}

1 个答案:

答案 0 :(得分:1)

EPD.cpp的顶部,添加以下行:

#include "flashHelper.h"