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.