I'm curious what on earth were you trying to achieve with this :
bool CParser::Id2(const char *s1, const char *s2)
{
CParser p = *this;
if (!p.Id(s1)) return false;
if (!p.Id(s2)) return false;
*this = p;
return true;
}
Well, see the input file...
That said, I would rather use some other method, reading the input file line by line, separating anything before ':' to get id, and only use CParser on the rest of line.
I guess the line nature of file is something that is not quite compatible with CParser.