1

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

2 回答 2

3

您需要添加而不需要包含#include "fConfig.h"在,因为您似乎没有使用in类型。fInstance.hfInstance.hfConfig.hfInstancefConfig.h

当您转发声明类型时,编译器不知道该类型的内存布局,因此它将该类型视为不完整类型,并且编译器无法执行任何需要知道该类型的内存布局的操作。

您在转发声明它之后创建一个实例fConfig,为此编译器需要知道它的内存布局,fConfig但由于您只是转发声明它,它不知道这一点,因此会抱怨。

于 2012-05-11T17:34:40.320 回答
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
于 2012-05-11T17:33:25.823 回答