我有一个C ++相互依赖的问题,我不明白问题在哪里...

这是我的标题:

json.array.h

#ifndef __JSON_ARRAY__
#define __JSON_ARRAY__

#include "json.object.h"

class JSON_OBJECT;

/* JSON_ARRAY */
class JSON_ARRAY {
    int size;
    custom_list<JSON_OBJECT> * container;

...
};

#endif


json.object.h

#ifndef __JSON_OBJECT__
#define __JSON_OBJECT__

#include "hash.h"
#include "elem_info.h"
#include "json.type.h"

class JSON_TYPE;
class elem_info;

/* JSON_OBJECT */
class JSON_OBJECT {
    custom_list<elem_info> *H;
    int HMAX;
    unsigned int (*hash) (std::string);
...
};

#endif


json.type.h

#ifndef __JSON_TYPE__
#define __JSON_TYPE__

#include "json.object.h"
#include "json.array.h"

class JSON_OBJECT;
class JSON_ARRAY;

class JSON_TYPE {
    JSON_ARRAY * _JSON_ARRAY_;
    JSON_OBJECT * _JSON_OBJECT_;
    std::string _JSON_OTHER_;
    std::string _JSON_TYPE_;
...
};

#endif


elem_info.h

#ifndef __ELEM_INFO__
#define __ELEM_INFO__

#include "json.type.h"
class JSON_TYPE;

class elem_info {
public:
    std::string key;
    JSON_TYPE value;
...
};

#endif


main.cpp

#include <iostream>
#include <string>

#include "custom_list.h" // it inculdes cpp also
#include "json.type.h"
#include "elem_info.h"
#include "json.object.h"
#include "json.array.h"
#include "json.type.cpp"
#include "elem_info.cpp"
#include "json.object.cpp"
#include "json.array.cpp"


int main()
{
    JSON_ARRAY * root = new JSON_ARRAY;
    JSON_OBJECT obj;
    JSON_OBJECT obj1;
    JSON_OBJECT * obj2 = new JSON_OBJECT;
    JSON_TYPE * type = new JSON_TYPE;
...
}


当我尝试编译代码时,出现以下错误:


  elem_info.h:10:15:错误:字段“值”的类型不完整
       JSON_TYPE值;


看起来找不到JSON_TYPE。我不明白问题出在哪里。

最佳答案

您在这里有一份前瞻性声明

class JSON_TYPE;

class elem_info {
public:
    std::string key;
    JSON_TYPE value;
...
};


但是valueJSON_TYPE的实例。如果您具有的成员是指针或引用,而不是实际实例,则只能转发声明。

实际上,由于在该前向声明之前有一个完整的include,因此您根本不需要该前向声明,而且正如我所说的那样,它也无济于事。您可以使用:

#ifndef __ELEM_INFO__
#define __ELEM_INFO__

#include "json.type.h"

class elem_info {
public:
    std::string key;
    JSON_TYPE value;
...
};

#endif

关于c++ - “值”字段的类型不完整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30126153/

10-12 18:21