最初のパラメータが意味をなさないときは、このエラーが発生します。 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)
このコードを上と下に表示できますか?それ以外のエラーはありましたか? – JaredPar