在标题中找不到C ++ extern

时间:2017-05-09 09:58:00

标签: c++ header extern libjpeg

我是C ++的新手,我正努力从一开始就尽力建立一个好的项目结构。 我正在使用C库libjpeg并将其包含在.cpp中,并使用

extern "C" {
  #include <jpeglib.h>
}

它工作正常,直到我删除它把它放在一个头文件,现在给我以下错误:

inc/jpeg_utils.h: 6: inc/jpeg_utils.h: extern: not found
inc/jpeg_utils.h: 8: inc/jpeg_utils.h: Syntax error: "}" unexpected

我的标题jpeg_utils.h

#ifndef JPEG_UTILS_INCLUDE
#define JPEG_UTILS_INCLUDE
#include <stdio.h>
extern "C" {
    #include <jpeglib.h>
}
int read_jpeg_file(char *filename, int decompression);
void write_jpeg_file(char *filename, unsigned char *image_buffer, int image_width, int image_height, int quality);
#endif

位于jpeg_utils.cpp的顶部:

#include "../inc/jpeg_utils.h"

我是否误解了标题的使用?

1 个答案:

答案 0 :(得分:2)

如果在{C}文件中包含jpeg_utils.h,则extern "C"指令将无法编译(显然,C不是C ++)。

只有在实际编译为C ++时才向extern "C"添加预处理器指令。

#ifdef __cplusplus
extern "C" {
#endif

    #include <jpeglib.h>

#ifdef __cplusplus
}
#endif