Форвардное объявление, вызывающее ошибки VC ++, не знаю, как их устранить - PullRequest
0 голосов
/ 31 марта 2011

Я какое-то время оглядывался по сторонам, пробовал довольно много разных подходов к этой проблеме, но все еще не могу получить прошлые ошибки, возникающие при прямом объявлении в программе с 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'

Есть какие-нибудь подсказки относительно того, что я здесь делаю неправильно?

1 Ответ

2 голосов
/ 31 марта 2011

Это не проблема предварительной декларации.Main.c может видеть полную декларацию class z.Должно быть, у z нет конструктора, по крайней мере, правильной формы, или, возможно, он является личным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...