【问题标题】:C++ extern not found when in header在标头中找不到 C++ extern
【发布时间】:2017-05-09 09:58:00
【问题描述】:

我对 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"

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

【问题讨论】:

  • 将标头重命名为 jpeg_utils.hpp 会改变什么吗?
  • @Jovasa 为什么要更改文件名,有什么不同?
  • 很遗憾没有。

标签: c++ header extern libjpeg


【解决方案1】:

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

仅当您实际上编译为 C++ 时,才向 extern "C" 添加预处理器指令。

#ifdef __cplusplus
extern "C" {
#endif

    #include <jpeglib.h>

#ifdef __cplusplus
}
#endif

【讨论】:

  • 我的项目在 C++ 中,只有我需要的 jpeg 库在 C 中。我使用 .h 而不是 .hpp 可能会令人困惑,但我读到没有区别.所以不幸的是,这个解决方案并不能解决我的问题。
  • @SarahHime - 后缀没有什么令人困惑的地方。该错误表明您将标头包含在编译为纯 C 的文件中。在确定它不能解决问题之前,您是否真的尝试此解决方案?
  • 当然试过了,还是报同样的错误(我是用g++编译的)。
  • @SarahHime - I took a look at the github page for a clone of libjpeg。它已经使用了extern "C",请尝试删除多余的并检查是否有帮助
  • 非常感谢,这解决了错误!我仍然很好奇它在我的 .cpp 文件中是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 2015-05-12
  • 2021-09-18
  • 1970-01-01
  • 2019-12-22
相关资源
最近更新 更多