Я получаю эту ошибку, когда первый параметр не имеет смысла. Убедитесь, что Evaluator
известен как тип:
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
Чтобы выяснить, является ли что-то объявлением объекта или функции, компилятору иногда приходится сканировать всю декларацию. Любая конструкция в объявлении, которая может сформировать объявление, считается декларацией. Если нет, то любая такая конструкция считается выражением. GCC, по-видимому, считает, что nonsense
не является допустимым типом, оно не может быть допустимым объявлением параметра и, таким образом, отступает, рассматривая все объявление как поле (обратите внимание, что в нем также указано error: expected ';' before '(' token
) , То же самое в местном масштабе
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)