我有这个代码
void Field::tick() {
this->snake.tick(this);
}
其中
this->snake
是Snake
类的类属性。Snake
类在this
方法中采用tick()
参数:void tick(Field field);
当然,在
Snake
的头文件中,我导入了Field.h
。现在,问题出在将字段类中的
this
实例传递给tick()
中的Snake
方法时,出现以下错误:c:/Users/x/Documents/NetBeansProjects/snake/Snake.h:12:15:fout:尚未声明字段
c:/用户/x/Documents/NetBeansProjects/snake/Field.cpp:在成员函数中void Field :: tick():
c:/Users/x/Documents/NetBeansProjects/snake/Field.cpp:14:27:fout:没有匹配的函数可以调用Snake :: tick(Field&)
c:/Users/x/Documents/NetBeansProjects/snake/Field.cpp:14:27:注意:候选人是:
c:/用户/x/Documents/NetBeansProjects/snake/Snake.h:12:10:注意:void Snake :: tick(int)
c:/Users/x/Documents/NetBeansProjects/snake/Snake.h:12:10:注意:参数1从Field到Int没有已知的转换
有什么建议么?
最佳答案
在文件Snake.h中,在声明类Field
之前声明类Snake
:
class Field;
class Snake
{
...
void tick(Field* field);
...
};
这应该可以解决编译错误,因为您在类
Field
中使用了类Snake
的指针。因此,编译器仅需要知道此类存在,而无需了解有关该类内容的任何信息。如果您使用的是实例,则会出现编译错误,因为编译器需要知道该实例的大小。因此,在声明类
Snake
之前声明类Field
的替代选项将不会编译,因为您正在使用类Field
中的类Snake
的实例,并且编译器需要知道该类的大小。实例:class Snake;
class Field
{
...
Snake snake;
...
};