Empecé a obtener el error "error C2059: error de sintaxis: 'argumento predeterminado'" para una línea de código que declaró una función con un argumento de cadena que recibió un parámetro predeterminado . Esto fue, obviamente, un poco frustrante, ya que el mensaje de error no fue muy esclarecedor (¡sé que es un 'argumento predeterminado'!), Y la declaración exacta funcionaría en otro lugar.Error de sintaxis sutil en el parámetro predeterminado no capturado por el compilador
Después de cambiar un poco la declaración, encontré que su posición en la clase contenedora tenía un efecto. Al reducirlo, descubrí que estaba declarando una función diferente de forma errónea, incluyendo un punto y coma después de uno de sus parámetros predeterminados. El compilador parecía perfectamente bien con eso, lo cual parecía un poco extraño. Investigué un poco más, y se acercó con el siguiente caso de prueba para tratar de averiguar la esencia de lo que estaba pasando:
enum TestEnum1
{
TEST_ONE
};
class TestClass
{
public:
enum TestEnum2
{
TEST_TWO,
TEST_THREE,
TEST_FOUR
};
void Func1(int iParm = TEST_ONE;); // additional semicolon here
void Func2(std::string strParm = "");
};
Como el código anterior se destaca, Func2 producirá el error de compilación que he mencionado anteriormente. Si muevo Func2 arriba de Func1, entonces todo compila bien.
Si cambio el parámetro predeterminado en Func1 a un número explícito o uso una enumeración declarada dentro de TestClass, entonces obtengo un error de sintaxis esperado para esa línea.
Así que, esencialmente, lo extraño parece ser que no se si fijo el valor de un parámetro por defecto para una enumeración definida directamente en la clase actual y soy un poco demasiado por punto y coma feliz, el compilador ignorará el error de sintaxis, hasta que otra cosa aparentemente no relacionada finalmente cause que el analizador fallezca de una manera muy inescrutable.
¿Me falta algo por completo? ¿Es este comportamiento esperado? Tengo dudas en llamarlo un error en el compilador, ciertamente, pero esto no parece correcto. Si solo estoy malinterpretando algo sobre el estándar, entonces me gustaría saber dónde estoy equivocado.
Obtengo el mismo error de compilación si Func1 está por encima o por debajo de Func2, usando gcc 3.4.4. – Beta
Eso es bueno saber. No tengo una manera fácil de probar diferentes compiladores configurados en este momento. –