类型未命名类型或错误:字段具有不完整类型

时间:2012-05-11 17:31:05

标签: c++ forward-declaration incomplete-type

我不知道为什么我会收到此错误...“错误:字段'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

2 个答案:

答案 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