Jump to content

  • Log In with Google      Sign In   
  • Create Account


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


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Coro   Members   -  Reputation: 112

Like
0Likes
Like

Posted 23 September 2012 - 11:47 AM

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, 23 September 2012 - 11:51 AM.


Sponsor:

#2 RobTheBloke   Crossbones+   -  Reputation: 2300

Like
2Likes
Like

Posted 23 September 2012 - 05:44 PM

change your file extension to ".cpp" from ".c".

#3 Cornstalks   Crossbones+   -  Reputation: 6966

Like
1Likes
Like

Posted 23 September 2012 - 11:02 PM

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. <stdlib.h> is for C, <cstdlib> is for C++ (so you should only include <cstdlib>). <stdio.h> is for C, <cstdio> is for C++ (so you should only include <cstdio>). <assert.h> is for C, <cassert> is for C++ (so you should change <assert.h> to <cassert>). There's a pattern here. If there's a C header and you want to use it in C++, drop the ".h" from the end, add "c" to the front of it, and access the things from the std:: 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.
[ 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 ]

#4 BinaryPhysics   Members   -  Reputation: 294

Like
0Likes
Like

Posted 26 September 2012 - 09:28 AM

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS