2017-05-09 21 views
1

저는 C++을 처음 접했고 처음부터 좋은 프로젝트 구조를 갖기 위해 최선을 다하고 있습니다. 나는 C 라이브러리 libjpeg을 사용하고 내가 지금 나에게 다음과 같은 오류가 제공하는 헤더 파일에 넣어 그것을 제거 할 때까지 잘 작동헤더에 C++ extern을 찾을 수 없습니다.

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

의 사용으로 내 .cpp에 포함되었다 :

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 

그리고상단에:

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

헤더 사용에 대한 잘못된 이해가 있었습니까?

+0

헤더의 이름을 jpeg_utils.hpp로 변경하면 아무 것도 변경되지 않습니까? – Jovasa

+1

@ Jovasa 파일의 이름을 변경해야하는 이유는 무엇입니까? –

+0

불행히도 아닙니다. – SarahHime

답변

2

jpeg_utils.h을 C 파일에 포함하면 해당 extern "C" 지시문이 컴파일되지 않습니다 (분명히 C는 C++이 아닙니다).

extern "C"에 대한 사전 처리기 지시문을 실제로 C++로 컴파일 할 때만 추가하십시오.

#ifdef __cplusplus 
extern "C" { 
#endif 

    #include <jpeglib.h> 

#ifdef __cplusplus 
} 
#endif 
+0

내 프로젝트는 C++로, 필요한 jpeg 라이브러리 만 C에 있습니다.'.h'가 아닌'.hpp'를 사용하는 것이 혼란 스러울 지 모르지만 차이점은 없습니다. 그래서 불행히도이 솔루션은 내 문제를 해결하지 못합니다. – SarahHime

+0

@SarahHime - 접미사가 혼란스럽지 않습니다. 이 오류는 순수 C로 컴파일 된 파일에 헤더를 포함 시켰음을 나타냅니다. 문제가 해결되지 않는다고 결정하기 전에 실제로이 솔루션을 시도 했습니까? – StoryTeller

+0

물론 시도해 보았지만 동일한 오류가 발생합니다 (g ++로 컴파일 중입니다). – SarahHime