7

假设有两个类,它们彼此需要:containeritem。类容器创建类item的实例。每个类item的实例都持有一个类容器的实例,只需要调用类容器的method_call_by_item方法即可。类容器需要查看类item的所有字段。

问题是前向声明:我想在item.h中有一个前向声明,以便类item可以有一个容器作为字段并调用方法method_call_by_item。我怎么做?

container,它创建项目。

// 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);
}
4

2 回答 2

11

在容器.h

class item; // do not include the item.h

在容器.cpp

#include "item.h"

在项目.h

class container; // do not include container.h

在项目.cpp

#include "container.h"
于 2013-05-25T21:11:08.310 回答
5

您已经添加了前向声明,item.h所以您需要做的就是将以下行添加到item.cpp.

#include "container.h"

container.h已经包含item.h,因此您不必进行任何其他更改,但正如Mahmoud Fayez指出的那样,您也可以在那里添加前向声明。这将消除通常需要的对头文件的依赖——它可以减少大型项目的构建时间并允许头文件“独立存在”。

于 2013-05-25T21:11:11.587 回答