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.
No comments yet