Я какое-то время оглядывался по сторонам, пробовал довольно много разных подходов к этой проблеме, но все еще не могу получить прошлые ошибки, возникающие при прямом объявлении в программе с 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() { ... }
Первая ошибка, которую я получаю, пытаясь скомпилировать в VS чистый проект не-PCH, не-ATL, возникает в моей реализации при попытке использовать Class z. Ошибка говорит мне, что он использует определение z от y.h, и я не уверен, как исправить это, не создавая проблему кругового включения. Текст ошибки следующий:
main.cpp (114): ошибка C2514: 'z': у класса нет конструкторов
y.h (9): см. Объявление 'z'
Есть какие-нибудь подсказки относительно того, что я здесь делаю неправильно?