C++;在标头中未找到外部项 我对C++非常陌生,我正努力从一开始就有一个好的项目结构。 我正在使用C库libjpeg,并使用 extern "C" { #include <jpeglib.h> }

C++;在标头中未找到外部项 我对C++非常陌生,我正努力从一开始就有一个好的项目结构。 我正在使用C库libjpeg,并使用 extern "C" { #include <jpeglib.h> },c++,header,extern,libjpeg,C++,Header,Extern,Libjpeg,我的标题jpeg\u 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

我的标题
jpeg\u 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

我是否误解了头的用法?

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

在C++编译时,将一个预处理器指令添加到代码>外部“C”< /> >,实际上编译为C++ + < /p>

#ifdef __cplusplus
extern "C" {
#endif

    #include <jpeglib.h>

#ifdef __cplusplus
}
#endif
\ifdef\uuucplusplus
外部“C”{
#恩迪夫
#包括
#ifdef_uucplusplus
}
#恩迪夫

< /代码>是否将标题重命名为JPEGJUTILS.HPP更改什么?“JoVasa为什么要更改文件名,有什么区别?不幸的不是。我的项目是C++,只有我需要的JPEG库在C.,可能混淆了我使用了<代码> .H/COD>而不是<代码>。HPP<代码>,但我读到没有区别。所以不幸的是,这个解决方案并不能解决我的问题。@SarahHime-后缀一点也不混乱。该错误表明您将头包含在一个编译为纯C的文件中。在确定此解决方案不能解决问题之前,您是否尝试过此解决方案?当然,我尝试过,但仍然会遇到相同的错误(我使用g++编译)。@SarahHime-。它已经使用了
extern“C”
,请尝试删除多余的,并检查它是否对您有帮助谢谢,这解决了错误!我仍然很好奇它在我的
.cpp
文件中是如何工作的。
#include "../inc/jpeg_utils.h"
#ifdef __cplusplus
extern "C" {
#endif

    #include <jpeglib.h>

#ifdef __cplusplus
}
#endif