头文件问题中的类定义

时间:2014-01-24 03:57:07

标签: c++

我从编译器收到以下错误 ./include.list.h(22)错误:标识符“input”未定义。

这是我明确定义输入的头文件 -

#ifndef INIT_H
#define INIT_H

#include "list.h"

class input{

public:

 //** thermo variables **//
  int N;
  double nddensity;
  double ndtemp;  
  double ndvol;
  double ndside;
  double ndsideh;

  // ** force field variables** //
  double eps;
  double sigma;
  double rcut;
  double rv;
  double rcut2;
  double rv2;
  double rcrv2;

  input();


};

void print(input &);
double randomnumber();
void  position(list &, input &, int flag);


#endif

在init.cpp中,我有类初始化:

  

input :: input(){

//** thermo variables **//
N = 500;
nddensity =.8;
ndtemp = 2.0;  
ndvol = N/nddensity;
ndside = pow(ndvol,1.0/3.0);
ndsideh = ndside/2;


// ** force field variables** //
eps = 1;
sigma = 1;
rcut = 2.5;
rv = 1.1*rcut;
rcut2 = rcut*rcut;
rv2 = rv*rv;
rcrv2 = (rv-rcut)*(rv-rcut);
 }

我似乎无法弄清楚为什么输入将被定义为无效打印。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

在类定义之前包含list.h ,因此在该标头中不可用。根据错误消息,list.h中的某些内容需要对类进行缩减。

此处不需要list的完整定义,因此请使用转发声明替换#include

class list;

list.h内,您可能需要input的类似声明;或者如果标题做了一些复杂的事情,可能需要包含init.h

答案 1 :(得分:1)

你有一个循环依赖。

你可以转发声明另一个类,但这仍然是一个糟糕的设计。最好完全废除循环依赖。乍一看,你甚至需要加入list.h吗?你在哪里使用它中声明的任何东西?