我从编译器收到以下错误 ./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); }
我似乎无法弄清楚为什么输入将被定义为无效打印。任何帮助表示赞赏。
答案 0 :(得分:1)
在类定义之前包含list.h
,因此在该标头中不可用。根据错误消息,list.h
中的某些内容需要对类进行缩减。
此处不需要list
的完整定义,因此请使用转发声明替换#include
class list;
在list.h
内,您可能需要input
的类似声明;或者如果标题做了一些复杂的事情,可能需要包含init.h
。
答案 1 :(得分:1)
你有一个循环依赖。
你可以转发声明另一个类,但这仍然是一个糟糕的设计。最好完全废除循环依赖。乍一看,你甚至需要加入list.h
吗?你在哪里使用它中声明的任何东西?