Arthur Schwarz schrieb:
In the following code fragment:
# include <ios>
# include <fstream>
# include <istream>
using namespace std;
void CommandLine(int argc, char** argv);
int main(int argc, char** argv) {
CommandLine(argc, argv[]);
ifstream x.open(argv[1], ios:in);
ofstream y.open(argv[1], ios::in);
return 0;
};
g++-4 messaging is:
g++-4 x.cpp
x.cpp: In function 'int main(int, char**)':
x.cpp:8: error: expected primary-expression before ']' token
x.cpp:10: error: expected primary-expression before ':' token
A recommendation and reason for change is:
1: x.cpp:8 error: illegal to pass an array without subscript value as an
argument
The given message is accurate but non-expressive of the reason
for failure.
Actually, in this case I'd say that the original message is perfectly
fine, and your suggestion is rather confusing. However, what one could
say here is something like "[] is only allowed in declarations".
3: cpp:10 error: illegal scope resolution operator ':'
From memory, there are three uses of ':' in C++
':' label terminator, <label>:
':' case in a switch statement, case <value>:
':' scope resolution operator, "::"
The given diagnostic message is deceptive.
Could perhaps say "':' is not a scope resolution operator", unless
someone comes up with a use case where it is ...