c++ - Más molesto análisis
most-vexing-parse (1)
Esto se debe al hecho de que TimeKeeper time_keeper(Timer());
se interpreta como una declaración de función y no como una definición de variable. Esto, en sí mismo, no es un error, pero cuando intenta acceder al miembro get_time()
de time_keeper (que es una función, no una instancia de TimeKeeper), su compilador falla.
Así es como su compilador ve el código:
int main() {
// time_keeper gets interpreted as a function declaration with a function argument.
// This is definitely *not* what we expect, but from the compiler POV it''s okay.
TimeKeeper time_keeper(Timer (*unnamed_fn_arg)());
// Compiler complains: time_keeper is function, how on earth do you expect me to call
// one of its members? It doesn''t have member functions!
return time_keeper.get_time();
}
Obtuve el código de here .
class Timer {
public:
Timer();
};
class TimeKeeper {
public:
TimeKeeper(const Timer& t);
int get_time()
{
return 1;
}
};
int main() {
TimeKeeper time_keeper(Timer());
return time_keeper.get_time();
}
Por lo que parece, debería obtener un error de compilación debido a la línea:
TimeKeeper time_keeper(Timer());
Pero solo ocurre si return time_keeper.get_time();
está presente.
¿Por qué importaría esta línea, el compilador detectaría ambigüedad en la time_keeper(Timer() )
de time_keeper(Timer() )
.