导致VC ++错误的前向声明,不确定如何解决

时间:2011-03-31 18:26:37

标签: c++ class visual-c++ include

我已经浏览了一段时间,尝试了很多不同的方法解决这个问题,但似乎仍然无法通过具有3个相关类的程序中的前向声明发生错误。

这是我当前代码结构的抽象视图,分为6个文件+ 1个主程序文件:

文件x.h:

#ifndef X_H
#define X_H

using namespace std;

class y;

class x
{
    private:
        y *m_oY;
    public:
        // constructors &c
};
#endif

文件x.cpp:

#include "x.h"
#include "y.h"
// Fancy stuff...

文件y.h:

#ifndef Y_H
#define Y_H

using namespace std;

class z;

class y
{
    private:
        z *m_oZ;
    public:
        // constructors &c
        z *funcZ()
};
#endif

档案y.cpp:

#include "y.h"
#include "z.h"
// Fancy stuff...

文件z.h:

#ifndef Z_H
#define Z_H

using namespace std;

class z { ... };
#endif

档案z.cpp:

#include "z.h"
// Fancy stuff...

文件main.cpp:

#include "z.h"
#include "y.h"
#include "x.h"
#include <iostream>

using namespace std;

int main() { ... }

我收到的第一个错误,尝试使用干净,非PCH,非ATL项目在VS中进行编译时,在我的实现中尝试使用Class z时。该错误告诉我它正在使用y.h中的z定义,并且我不确定如何在不创建循环包含问题的情况下解决这个问题。错误的文本如下:

  

main.cpp(114):错误C2514:'z':类没有构造函数

     

y.h(9):见'z'的声明

关于我在这里做错了什么的线索?

1 个答案:

答案 0 :(得分:2)

这不是前瞻性声明问题。 Main.c可以看到class z的完整声明。必须是z没有构造函数,至少是正确的形状,或者它可能是私有的。