C++"this"实例传递给类中的属性



我有这样的代码

void Field::tick() {
    this->snake.tick(this);
}

,其中this->snakeSnake类的类属性。Snake类采用tick()方法中的this参数:

void tick(Field field);

当然,在Snake的头文件中,我导入了Field.h

现在问题是在将字段类中的this的实例传递给Snake中的tick()方法时,我得到以下错误:

c:/Users/x/Documents/NetBeansProjects/snake/snake .h:12:15: out: Field没有被声明c:/Users/x/Documents/NetBeansProjects/snake/Field.cpp: In memberfunction void Field::tick():c:/Users/x/Documents/NetBeansProjects/snake/Field.cpp:14:27: 4:没有匹配的函数调用snake::tick(Field&)c:/Users/x/Documents/NetBeansProjects/snake/Field.cpp:14:27:注:候选是:c:/Users/x/Documents/NetBeansProjects/snake/snake .h:12:10: note: void snake::tick(int)c:/Users/x/Documents/NetBeansProjects/snake/snake .h:12:10:注意:未知参数1从Field到int
的转换

有什么建议吗?

在文件Snake.h中,在声明Snake类之前声明Field类:

class Field;
class Snake
{
    ...
    void tick(Field* field);
    ...
};

这应该可以修复编译错误,因为您在类Snake中使用了类Field的指针。所以编译器只需要知道这样的类存在,但它不需要知道该类的任何内容。如果您使用的是实例,那么您将得到一个编译错误,因为编译器需要知道该实例的大小。

因此,在声明类Field之前声明类Snake的替代选项将无法编译,因为您在类Snake中使用了类Field的实例,并且编译器需要知道该实例的大小:

class Snake;
class Field
{
    ...
    Snake snake;
    ...
};

相关内容

最新更新