Otrzymuję ten błąd, gdy pierwszy parametr nie ma dla niego sensu. Sprawdź, Evaluator
znany jest jako typ:
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
Aby dowiedzieć się, czy coś jest deklaracja obiektu lub funkcji, kompilator musi czasami skanować całą deklarację. Wszelkie konstrukcje w deklaracji, które mogłyby ewentualnie stanowić deklarację, uważa się za deklarację. Jeśli nie, to każdy taki konstrukt jest uważany za wyrażenie. GCC najwyraźniej uważa, że ponieważ nonsense
nie jest poprawnym typem, nie może być prawidłową deklaracją parametru, a tym samym cofa przetwarzanie całej deklaracji jako pola (zauważ, że dodatkowo jest to error: expected ';' before '(' token
). To samo dotyczy lokalnego zakresu:
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)
Czy możesz pokazać kod powyżej i poniżej? Czy są jakieś inne błędy. – JaredPar