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

タイプinを使用していないように見えるため、 #include "fConfig.h"inを追加する必要があり、 infInstance.hを含める必要はありません。fInstance.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 に答える