我已经浏览了一段时间,尝试了很多不同的方法解决这个问题,但似乎仍然无法通过具有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'的声明
关于我在这里做错了什么的线索?
答案 0 :(得分:2)
这不是前瞻性声明问题。 Main.c可以看到class z
的完整声明。必须是z
没有构造函数,至少是正确的形状,或者它可能是私有的。