Errors between C/C++ libs and windows.h

Started by
2 comments, last by Alex Melbourne 11 years, 6 months ago
Hey Everyone

I'm currently having a problem with some libraries that I'm trying to import into my project. I have created an OBJ Loader in which you can load the contents of an "obj" file into some C arrays, which then passed into OpenGL (Glut) to render to the screen. My problem is that I have certain libraries conflicting with each other. Glut requires "windows.h" for the "gl.h" file. But I also need some other standard libraries such as:

<SDL>
<cstdlib>
<vector>
<string>
<algorithm>
<fstream>
<cstdio>
<stdlib.h>
<stdio.h>
<assert.h>

So all together my code looks like this:


#include <SDL/SDL.h>
#include <cstdlib>
#include <vector>
#include <string>
#include <algorithm>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <cstdio>
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#endif
#include <GL/glut.h>


From this I get a whole load of errors:

http://imagebin.org/229514

Any help will be appreciated!

P.s. I know that its conflictions between the libraries but I don't know what things to undefine.
Advertisement
change your file extension to ".cpp" from ".c".
Note that you're also using some C headers and also their C++ equivalents, which may not cause technical errors, but is still bad practice. [font=courier new,courier,monospace]<stdlib.h>[/font] is for C, [font=courier new,courier,monospace]<cstdlib>[/font] is for C++ (so you should only include [font=courier new,courier,monospace]<cstdlib>[/font]). [font=courier new,courier,monospace]<stdio.h>[/font] is for C, [font=courier new,courier,monospace]<cstdio>[/font] is for C++ (so you should only include [font=courier new,courier,monospace]<cstdio>[/font]). [font=courier new,courier,monospace]<assert.h>[/font] is for C, [font=courier new,courier,monospace]<cassert>[/font] is for C++ (so you should change [font=courier new,courier,monospace]<assert.h>[/font] to [font=courier new,courier,monospace]<cassert>[/font]). There's a pattern here. If there's a C header and you want to use it in C++, drop the "[font=courier new,courier,monospace].h[/font]" from the end, add "[font=courier new,courier,monospace]c[/font]" to the front of it, and access the things from the [font=courier new,courier,monospace]std::[/font] namespace instead of the global namespace. That's the "proper" way to use standard C headers in C++.

C and C++ are not the same language and should not be treated the same. That's why you can't include a C++ header in a C file, and there is a specific way to include standard C headers in C++ files.
[size=2][ I was ninja'd 71 times before I stopped counting a long time ago ] [ f.k.a. MikeTacular ] [ My Blog ] [ SWFer: Gaplessly looped MP3s in your Flash games ]
As a side point I always find it helpful to arrange my includes in a particular way... That is assuming that they need to be at the top of the document.

Try arranging it like: C standard library files (the <c*> versions), C++ standard library files, other compiler includes, and then your own custom headers.

This topic is closed to new replies.

Advertisement