2017-05-09 3 views
1

ich sehr neu in C++ bin gefunden, und ich versuche, mein Bestes zu tun, um eine gute Projektstruktur von Anfang an haben. Ich bin mit der C-Bibliothek libjpeg und wurde einschließlich es in meinem .cpp mit dem Einsatz vonC++ extern nicht, wenn sie in Kopf

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

Es funktionierte gut, bis ich es entfernt es in einer Header-Datei zu setzen, die gibt mir jetzt die folgenden Fehler:

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

Mein Kopf 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 

Und an der Spitze der jpeg_utils.cpp:

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

Habe ich die Verwendung eines Headers missverstanden?

+0

Ändert die Umbenennung der Kopfzeile in jpeg_utils.hpp irgendetwas? – Jovasa

+1

@Jovasa Warum sollte der Name der Datei geändert werden, um einen Unterschied zu machen? –

+0

Leider nicht. – SarahHime

Antwort

2

Wenn Sie jpeg_utils.h in einer C-Datei enthalten, wird die extern "C" Direktive nicht kompilieren (offensichtlich ist C nicht C++).

hinzufügen Pre-Prozessor-Direktive zu extern "C" nur dann, wenn in der Tat Sie als C++ kompilieren.

#ifdef __cplusplus 
extern "C" { 
#endif 

    #include <jpeglib.h> 

#ifdef __cplusplus 
} 
#endif 
+0

Mein Projekt in C++ ist, wird nur die JPEG-Bibliothek, die ich brauche, ist in C. Es kann verwirrend sein, dass ich ein '.h' verwendet und kein' .hpp' aber ich gelesen, dass es keine Unterschiede ist. Leider löst diese Lösung mein Problem nicht. – SarahHime

+0

@SarahHime - Das Suffix ist nicht verwirrend. Der Fehler weist auf die Tatsache hin, dass Sie Ihren Header in eine Datei eingefügt haben, die als reines C kompiliert wurde. Haben Sie diese Lösung tatsächlich * versucht *, bevor Sie entschieden haben, dass sie das Problem nicht löst? – StoryTeller

+0

Natürlich habe ich es versucht, ich bekomme immer noch den gleichen Fehler (ich kompiliere mit g ++). – SarahHime