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

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

## 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 on other sites
change your file extension to ".cpp" from ".c".

##### Share on other sites
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 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.

1. 1
Rutin
32
2. 2
3. 3
4. 4
5. 5

• 12
• 9
• 9
• 9
• 14
• ### Forum Statistics

• Total Topics
633315
• Total Posts
3011328
• ### Who's Online (See full list)

There are no registered users currently online

×