Jump to content

View more

Image of the Day

Inventory ! Va falloir trouver une autre couleur pour le cadre D: #AzTroScreenshot #screenshotsaturday https://t.co/PvxhGL7cOH
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.


Sign up now

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

4: Adsense

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   

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.


#2 RobTheBloke   Members   

2552
Like
2Likes
Like

Posted 23 September 2012 - 05:44 PM

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

#3 Cornstalks   Members   

7030
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   

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.