• Advertisement
Sign in to follow this  

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

This topic is 1944 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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. Edited by Coro

Share this post


Link to post
Share on other sites
Advertisement
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement