Archiv für Februar 2012
Zeige alle Ergebnisse (4 Ergebnisse gefunden)
Monate (2012)
- Mai 2012 (2)
- April 2012 (2)
- März 2012 (1)
- Februar 2012 (4)
- Januar 2012 (6)
Kategorien
- Common Groups (279)
- Articles (61)
- Code Project (10)
- Funny Stuff (181)
- Musik and Audio (16)
- Pinned (7)
- Strange Stuff (2)
- Videos (95)
- Articles (61)
- Private Blog (117)
- Real Life Pics (20)
- Wisdom of the Day (41)
- Tech Blog (267)
- Annoyances (4)
- Computer (170)
- Games (1)
- Hardware (17)
- Internet (10)
- Software (59)
- Manski's Toolbox (3)
- Software Development (29)
- Gagdets (18)
- Tips and Tricks (6)
Meaningful C++ error message
During my time as a student at the University of Stuttgart we had to learn the programming language Ada. Back then I was swearing about the compiler error message because they were totally meaningless (at least to me).
I am currently working on a C++ project and I have to say that C++ isn’t an inch better than Ada. Consider the following code:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <Windows.h> namespace Geometry { class Polyline { }; } using Geometry::Polyline; namespace OtherNS { Polyline* get() { return NULL; } } |
Trying to compile this code gives you the following error message (on Visual C++ 2010):
using_test.cpp(10): error C2143: syntax error : missing ';' before '*' using_test.cpp(10): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int using_test.cpp(10): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
What? Syntax error? And then you start looking where you missed a ;.
The problem, however, is completely different. It’s because there is a function called Polyline() defined somewhere in Windows.h and now the compiler tries to use this function as return type instead of the class Polyline (but doesn’t say anything about that). <irony>This, of course, becomes totally clear just by reading this extremely meaningful error message.</irony> *sigh*
GCC isn’t better here (in case you were blindly blaming Microsoft for writing bad error messages):
error: ‘Polyline’ does not name a type
By the way, the problem can be solved by placing the using statement inside the OtherNS namespace.
C++ references and inheritance
The last few days I’ve been hunting a bug in a C++ project I’ve been working on. This hunt again showed me how easily you can break C++ programs by accident (something that isn’t possibly in Java or C#). You need to completely understand the inner workings of C++ to avoid such pitfalls.
The whole problem was a result of me thinking that C++ references (&) are just pointers (*) that have some restrictions (e.g. they can’t be NULL). Wrong! What’s even worse: They’re sometimes just pointers with some restriction. This makes them work in some cases but fail in others.
Let me take you on my journey and you’ll hopefully avoid this (very subtle) mistake in your work.



