假设有两个类,它们需要彼此:容器和项目.
类容器创建类项的实例.类项的每个实例都包含一个类容器的实例,只需要调用类容器的方法method_called_by_item.类容器需要查看类项的所有字段.
类容器创建类项的实例.类项的每个实例都包含一个类容器的实例,只需要调用类容器的方法method_called_by_item.类容器需要查看类项的所有字段.
问题是前向声明:我想在item.h中有一个前向声明,这样类项可以有一个容器作为字段并调用方法method_called_by_item.我怎么做?
类容器,用于创建项目.
// container.h #ifndef CONTAINER_H #define CONTAINER_H #include "item.h" class container{ public: item * create_item(); void method_called_by_item(item * i); }; #endif //CONTAINER_H
实施:
// container.cpp #include "container.h" item * container::create_item(){ return new item(this); } void container::method_called_by_item(item * i){ // do stuff with item }
// item.h #ifndef ITEM_H #define ITEM_H #include <iostream> class container; class item{ public: item(container * c); void do_something(); container * c; }; #endif //ITEM_H
实施:
// item.cpp #include "item.h" item::item(container * c){ this->c = c; } void item::do_something(){ this->c->method_called_by_item(this); }
解决方法
@H_403_24@ 您已经向item.h添加了前向声明,因此您需要做的就是将以下行添加到item.cpp中.#include "container.h"
container.h已经包含item.h,因此您不必进行任何其他更改,但正如Mahmoud Fayez所指出的那样,您也可以在其中添加前向声明.这将消除通常需要的头文件的依赖性 – 它可以减少大型项目的构建时间,并允许头文件“独立”.