我的班级中有以下方法定义:
virtual Calc* Compile(
Evaluator* evaluator, ResolvedFunCall* fun_call, string* error);
出于某种原因,GCC 抱怨说:
error: 'Compile' declared as a 'virtual' field
任何想法为什么它会相信 Compile 是一个领域,而不是一个方法?
我的班级中有以下方法定义:
virtual Calc* Compile(
Evaluator* evaluator, ResolvedFunCall* fun_call, string* error);
出于某种原因,GCC 抱怨说:
error: 'Compile' declared as a 'virtual' field
任何想法为什么它会相信 Compile 是一个领域,而不是一个方法?
当第一个参数对它没有意义时,我会收到该错误。检查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)