C++ 类型未命名类型或错误:字段的类型不完整
我不确定为什么会出现此错误…错误:字段“config”的类型不完整。我已经尝试过使用include…做转发声明并包含标题,我只是想在fInstance中包含fConfig ifndef FINSTANCE_H 定义FINSTANCE_H //包括fConfig.h 包括 包括 包括 使用名称空间std; 类fConfig; 阶级立场 { 公众: pid_t pid; fConfig配置; 矢量注释; 向量时间; 芬斯坦斯; 虚拟现实; }; endif//FINSTANCE\u H ifndef FCONFIG_H 定义FCONFIG_H 包括 包括 包括 包括 包括 包括 包括 包括 包括JWDSFork.h 包括fInstance.h 使用名称空间std; 类fConfig { 私人: pid_t pid,w; 公众: pid_t cPid; 字符串名; int组; int instanceId; 国际核密度; 智力测验; 布尔回复; bool调试; 布尔服务; 布尔电流运行; 时间开始时间; 时间结束时间; 字符串路径; fConfig; 虚拟~fConfig; 无效启动; 字符串IntToString; char*stringToCharstring; }; endif//FCONFIG_H 编辑:添加了更改C++ 类型未命名类型或错误:字段的类型不完整,c++,forward-declaration,incomplete-type,C++,Forward Declaration,Incomplete Type,我不确定为什么会出现此错误…错误:字段“config”的类型不完整。我已经尝试过使用include…做转发声明并包含标题,我只是想在fInstance中包含fConfig ifndef FINSTANCE_H 定义FINSTANCE_H //包括fConfig.h 包括 包括 包括 使用名称空间std; 类fConfig; 阶级立场 { 公众: pid_t pid; fConfig配置; 矢量注释; 向量时间; 芬斯坦斯; 虚拟现实; }; endif//FINSTANCE\u H ifndef
您需要将fConfig的完整定义放在fInstance之前。转发声明不起作用,因为fInstance有一个fConfig数据成员,所以需要完整类型: 在fConfig.h中: 在fInstance.h中:
您需要将fConfig的完整定义放在fInstance之前。转发声明不起作用,因为fInstance有一个fConfig数据成员,所以需要完整类型: 在fConfig.h中: 在fInstance.h中: 您需要在fInstance.h中添加include fConfig.h,而不需要在fConfig.h中包含fInstance.h,因为您似乎没有在fConfig.h中使用fInstance类型 当您向前声明类型时,编译器不知道该类型的内存布局,因此它将该类型视为不完整类型&编译器无法执行任何需要知道该类型内存布局的操作 在前向声明fConfig后,您创建了一个fConfig实例,要执行此操作,编译器需要知道fConfig的内存布局,但由于您刚刚前向声明了它,它不知道这一点,因此会抱怨。您需要在fInstance.h中添加include fConfig.h,而不需要在fConfig.h中包含fInstance.h,因为您似乎没有在fConfig.h中使用fInstance类型 当您向前声明类型时,编译器不知道该类型的内存布局,因此它将该类型视为不完整类型&编译器无法执行任何需要知道该类型内存布局的操作
在前向声明fConfig后,您创建了一个fConfig实例,要执行此操作,编译器需要知道fConfig的内存布局,但由于您刚刚前向声明了它,它不知道,因此会发出抱怨。@op:Forwarding声明在您仅使用该数据类型的引用或指针时非常有用。因为您使用的是完整的实例,所以需要完整的定义。@那么创建实例是使用new?我以为调用fConfig config声明了一个实例?@Spidey如何完全声明这个实例?@JonH:它声明了类的一个成员,但是编译器需要估计在fInstance中存储fConfig类型的对象所需的内存量。编译器如何知道fInstance对象需要多少内存?通过汇总fInstance所有成员所需的内存,那么..@Als那么我应该做些什么fConfig*config;????如果是这样,我如何在cpp中访问该类的成员?@op:当您仅使用对该数据类型的引用或指针时,转发声明非常有用。因为您使用的是完整的实例,所以需要完整的定义。@那么创建实例是使用new?我以为调用fConfig config声明了一个实例?@Spidey如何完全声明这个实例?@JonH:它声明了类的一个成员,但是编译器需要估计在fInstance中存储fConfig类型的对象所需的内存量。编译器如何知道fInstance对象需要多少内存?通过汇总fInstance所有成员所需的内存,那么..@Als那么我应该做些什么fConfig*config;????如果是,我如何访问cpp中该类的成员?好的,完整的定义是什么意思…我需要使用新的吗?@john不,一点也不。只需将所有fConfig内容放在fInstance之前,并从fConfig.h中删除fInstance.h include。我是否将其声明在类的范围之外?当我这样做时,它会说fConfig没有命名type@JonH你一定是做错了什么。我建议编译的内容,看看完整的定义是什么意思…我需要使用新的吗?@john不,一点也不。把所有的fConfig都放在
fore fInstance,并从fConfig.h中删除fInstance.h include。我是否在类的作用域之外声明它?当我这样做时,它会说fConfig没有命名type@JonH你一定是做错了什么。我建议编译的内容,请参见
#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 FCONFIG_H
#define FCONFIG_H
class fConfig {
// as in original
};
#endif
#ifndef FINSTANCE_H
#define FINSTANCE_H
#include "fConfig.h" // need to include to get full type
class fInstance {
// as in original
};
#endif