Aparece ese error cuando el primer parámetro no tiene sentido. Compruebe que Evaluator
se conoce como tipo:
struct A {
virtual void* b(nonsense*, string*);
};
=> error: 'b' declared as a 'virtual' field
struct A {
virtual void* b(string*, nonsense*);
};
=> error: 'nonsense' has not been declared
Para saber si algo es una declaración de objeto o función, el compilador a veces tiene que escanear toda la declaración. Cualquier construcción dentro de la declaración que podría formar una declaración se toma como una declaración. Si no, entonces se considera que cualquier construcción es una expresión. GCC aparentemente piensa que porque nonsense
no es un tipo válido, no puede ser una declaración de parámetro válida, y por lo tanto vuelve a tratar la declaración completa como un campo (nota que dice además error: expected ';' before '(' token
). Lo mismo en el ámbito local
int main() {
int a;
// "nonsense * a" not treated as declaration
void f(nonsense*a);
}
=> error: variable or field 'f' declared void
int main() {
// "nonsense * a" treated as parameter declaration
typedef int nonsense;
void f(nonsense*a);
}
=> (compiles successfully)
¿Nos puede mostrar el código anterior y siguiente? ¿Hubo algún otro error? – JaredPar