Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类型未命名类型或错误:字段的类型不完整_C++_Forward Declaration_Incomplete Type - Fatal编程技术网

C++ 类型未命名类型或错误:字段的类型不完整

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

我不确定为什么会出现此错误…错误:字段“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 编辑:添加了更改


您需要将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