• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Crusable77

Inclusion Guards

12 posts in this topic

Hello, I was working on a project and it says that I have redefined a class, It took me 20 min to figure out that my inclusion guards where not working. I wrote them like so:
 
#ifndef IMAGE_HANDLER_H
#define IMAGE_HANDLER_H
 
class ImageHandler{
 
    //Handle stuff
};
 
#endif //IMAGE_HANDLER_H
 
 
Am I doing them wrong? Is there a better way to do them? Am I just crazy? Thank you in advance for your help.
0

Share this post


Link to post
Share on other sites

Do you ever #undef anything? I can't think of why else you would be getting a redefinition error.

Edited by Aressera
0

Share this post


Link to post
Share on other sites

That looks correct to me. Can you post a larger example of why you think they're not working?

 

There is an alternate way to write them, but it's not necessarily better or worse, just different (see the linked thread for arguments for/against each way).

 

I have a button class which includes the Image handler class and so does my System class(The system class contains the GameLoop). When I commented the Button code It worked.

 

 

 

Do you ever #undef anything? I can't think of why else you would be getting a redefinition error.

No.

Edited by Mathew Bergen
0

Share this post


Link to post
Share on other sites

I changed all my inclusion guards to pragma once and it works now. None of the names where the same so  I don't know why they where not working. 

0

Share this post


Link to post
Share on other sites

I'm going to be honest. I actually prefer 'pragma once' now. It's not 'standard' (before everyone has a go at me, I mean that it isn't written in the standards document that describes C++. Yes a lot of compilers support it but no-one is required to) so you can't write absolutely 100% portable code.

 

However, for my current project I use several other Visual Studio specific additions of pragma so I'm not concerned with portability. 'pragma once' has the added benefit of possibly speeding up the compile time as the compiler can refuse to open the file again.

 

That said if you wanted to go back to include guards Google's C++ programming guide dictates that include guard names are written as $(PROJECT_NAME)_$(FILE_DIR)_$(FILENAME)_H. I thought that was quite a simple and elegant method of generating unique guards.

1

Share this post


Link to post
Share on other sites

Sigh, silly stuff like that reminds us how ancient that language really is ;-)

I'd use #pragma once, some people object, for it not being standard, but I haven't met a compiler in at least the past 5 years that didn't support it.

1

Share this post


Link to post
Share on other sites

Sigh, silly stuff like that reminds us how ancient that language really is ;-)

I'd use #pragma once, some people object, for it not being standard, but I haven't met a compiler in at least the past 5 years that didn't support it.

 

Here here, it's my opinion that other languages are approaching the performance barrier and are infinitely more productive but that's another conversation in and of itself.  For this particular question everyone seems to have addressed the possible problems so I'll just add a little tip concerning compiler issues that I have overcome in the past. First off, the "clean build"... Always ALWAYS do this.  Visual Studio especially has a nasty habit of ignoring to recompile files if it deems your changes to be superficial, many times you can change a single line of code and visual studio is like "eh it's close enough" and will roll with it.  NORMALLY this creates link time errors in the compilation process but has been known to cause random irrational errors.  Rule of thumb when compiling C++ code, if the error or warning reported doesn't immediately make sense run a complete clean re build (even delete the object and build files if necessary).  Other people may disagree with this next statement but it never hurts to try it yourself and see if it helps you.  The "Play" button on visual studio is not smart and doesn't always know what to do correctly.  It assumes that if something appears to already have been compiled that it is correct and ready to go and this leads to issues.  Right click the project and select clean build before you click play every time just to be safe.  Other than that barring any name clashes or scoping issues your code should have worked.

0

Share this post


Link to post
Share on other sites

Here here, it's my opinion that other languages are approaching the performance barrier and are infinitely more productive but that's another conversation in and of itself.  For this particular question everyone seems to have addressed the possible problems so I'll just add a little tip concerning compiler issues that I have overcome in the past. First off, the "clean build"... Always ALWAYS do this.  Visual Studio especially has a nasty habit of ignoring to recompile files if it deems your changes to be superficial, many times you can change a single line of code and visual studio is like "eh it's close enough" and will roll with it.

 

 


If you think MS VS is particularly bad about this, try using Qt Creator for a while, and you'll never again complain about VS :-D

0

Share this post


Link to post
Share on other sites

So far and up to 2010, VS has never given me reason to complain, but after converting a project to 2012, some of the issues just aren't funny anymore. I make changes, compile, get an error because of a typo, fix it, compile... and it's ignoring the file and seems to use an old object file from several compiles ago, forcing me to either waste a lot of time on constant rebuilds or manually deleting the old files.

 

I really hope that's "just" an issue with converted projects or maybe something about this project in particular. On the other hand, I heard some people cursing about it at work as well.

0

Share this post


Link to post
Share on other sites

So far and up to 2010, VS has never given me reason to complain, but after converting a project to 2012, some of the issues just aren't funny anymore. I make changes, compile, get an error because of a typo, fix it, compile... and it's ignoring the file and seems to use an old object file from several compiles ago, forcing me to either waste a lot of time on constant rebuilds or manually deleting the old files.

 

I really hope that's "just" an issue with converted projects or maybe something about this project in particular. On the other hand, I heard some people cursing about it at work as well.

 

Interesting. Haven't tried VS2012 yet. Maybe it's because the one major Eclipse guy joined the VS team. After taking care of Eclipse, he's going to make a mess out of VS, too... and some day, VS will be just as crappy as all those open source tool chains *smells communist conspiracy* :-D Well but seriously, I've heard some other weird things about 2012 and really wonder what MS is up to recently...
 

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0