我不知道为什么我会收到此错误...“错误:字段'config'的类型不完整”。我试图使用#include进行前向声明并包含标题...我只是想在fInstance中包含fConfig ...
#ifndef FINSTANCE_H
#define FINSTANCE_H
//#include "fConfig.h"
#include <vector>
#include <sys/types.h>
#include <string>
using namespace std;
class fConfig;
class fInstance
{
public:
pid_t pid;
fConfig config;
vector<string> notes;
vector<time_t> times;
fInstance();
virtual ~fInstance();
};
#endif // FINSTANCE_H
#ifndef FCONFIG_H
#define FCONFIG_H
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <sys/types.h>
#include <fcntl.h>
#include "JWDSFork.h"
#include "fInstance.h"
using namespace std;
class fConfig
{
private:
pid_t pid, w;
public:
pid_t cPid;
string name;
int group;
int instanceId;
int numInstance;
int tries;
bool reply;
bool debug;
bool service;
bool currentlyRunning;
time_t startTime;
time_t endTime;
string path;
fConfig();
virtual ~fConfig();
void start();
string intToString(int);
char* stringToChar(string);
};
#endif // FCONFIG_H
编辑:添加了更改
#ifndef FINSTANCE_H
#define FINSTANCE_H
#include "fConfig.h"
#include <vector>
#include <sys/types.h>
#include <string>
using namespace std;
//class fConfig;
class fInstance
{
public:
pid_t pid;
fConfig* config;
vector<string> notes;
vector<time_t> times;
fInstance();
virtual ~fInstance();
};
#endif // FINSTANCE_H
#ifndef FCONFIG_H
#define FCONFIG_H
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <sys/types.h>
#include <fcntl.h>
#include "JWDSFork.h"
//#include "fInstance.h"
using namespace std;
class fConfig
{
private:
pid_t pid, w;
public:
pid_t cPid;
string name;
int group;
int instanceId;
int numInstance;
int tries;
bool reply;
bool debug;
bool service;
bool currentlyRunning;
time_t startTime;
time_t endTime;
string path;
fConfig();
virtual ~fConfig();
void start();
string intToString(int);
char* stringToChar(string);
};
#endif // FCONFIG_H
答案 0 :(得分:3)
您需要在#include "fConfig.h"
中添加fInstance.h
,而您无需在fInstance.h
中加入fConfig.h
,因为您似乎没有使用{{1}类型在fInstance
。
当您转发声明时,类型编译器不知道该类型的内存布局,因此它将该类型视为不完整类型&amp;编译器无法执行任何需要知道该类型的内存布局的操作。
在向前声明它之后创建fConfig.h
的实例,为了使编译器需要知道fConfig
的内存布局,但是因为你只是向前声明它,它不知道它,因此抱怨。
答案 1 :(得分:2)
您需要在fConfig
之前加上fInstance
的完整定义。由于您的fInstance
有一个fConfig
数据成员,因此前向声明无效,因此必须填写完整类型:
fConfig.h
中的:
#ifndef FCONFIG_H
#define FCONFIG_H
class fConfig {
// as in original
};
#endif
fInstance.h
中的:
#ifndef FINSTANCE_H
#define FINSTANCE_H
#include "fConfig.h" // need to include to get full type
class fInstance {
// as in original
};
#endif