Estaba compilando un programa C++ en Cygwin usando g ++ y tenía una clase cuyo constructor no tenía argumentos. Tenía las líneas:¿No hay paréntesis en un constructor sin argumentos, un estándar de lenguaje?
MyClass myObj();
myObj.function1();
Y cuando se trata de compilarlo, me dieron el mensaje:
error: solicitud de 'function1' miembro 'myObj', que es del tipo no-clase 'MiClase()() '
Después de investigar un poco, encontré que la solución era cambiar esa primera línea a MyClass myObj;
Podría jurar que he hecho declaraciones de constructores vacías con paréntesis en C++ antes. ¿Es esto probablemente una limitación del compilador que estoy usando o el estándar de lenguaje realmente dice que no use paréntesis para un constructor sin argumentos?
Expandir: solo es un problema en determinados contextos. Escribe "throw myexceptionclass();", por ejemplo, y no hay confusión. El lenguaje es ambiguo en el contexto de Petes, pero las reglas de desambiguación (la razón por la cual el lenguaje estrictamente no es realmente ambiguo) eligen una interpretación. Por supuesto, las reglas de desambiguación significan que el lenguaje no es realmente ambiguo, pero los expertos en análisis lo dicen de todos modos, ¡así que estoy autorizado! Las reglas de desambiguación más comunes en muchos idiomas son para la precedencia y la asociatividad del operador: C y C++ son mucho más ambiguos y, como resultado, hay algunos problemas extraños. – Steve314