Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > перекрестные ссылки класс на класс


Автор: sergey_85 29.12.2009, 07:01
Привет!

При сборке проекта появилась проблема использования одного класса в другом:
компилятор msvc 2005, framework qt 4.4.3

Лезут такие вот ошибки:
Код

Error    1    error C2143: syntax error : missing ';' before '*'    c:\qtprojects\ww\ww\Engine.h    15
Error    3    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int    c:\qtprojects\ww\ww\Engine.h    15




#include "Engine.h"
Код

ifndef ENGINE_H
#define ENGINE_H

#include <QObject>
#include "scriptform.h"

class Engine : public QObject
{
    Q_OBJECT

public:
    Engine(QObject *parent);
    ~Engine();

    ScriptForm *runForm();

private:
    
};

#endif // ENGINE_H


#include "Engine.cpp"
Код

#include "Engine.h"

Engine::Engine(QObject *parent)
    : QObject(parent)
{

}

Engine::~Engine()
{

}

ScriptForm *Engine::runForm()
{
    ScriptForm *frm = new ScriptForm(0);

    frm->execAction();

    return frm;
}


#include "scriptform.h"
Код

#ifndef SCRIPTFORM_H
#define SCRIPTFORM_H

#include <QObject>
#include "Engine.h"

class ScriptForm : public QObject
{
    Q_OBJECT

public:
    ScriptForm(QObject *parent);
    ~ScriptForm();

    void execAction();

private:
    Engine *eng;
    
};

#endif // SCRIPTFORM_H


#include "scriptform.cpp"
Код

#include "scriptform.h"

ScriptForm::ScriptForm(QObject *parent)
    : QObject(parent)
{

}

ScriptForm::~ScriptForm()
{

}

void ScriptForm::execAction()
{
    //
}


Дело вот в чём, в Engine есть ссылка на ScriptForm и наоборот.
И тут и там вызываются методы обоих классов, но получается так, что они не видяться при компиляции, как решить такую проблемку, мне нужно юзать методы класса Engine  внутри класса ScriptForm и наоборот юзать ScriptForm в Engine!

Спасибо за помощь!

Автор: Earnest 29.12.2009, 08:13
Не надо включать h-файлы друг в друга, достаточно forward declaration, соответственно, Engine и ScriptForm. А в cpp-файлы включи оба хедера. Безусловно, в хедерах нельзя писать инлайн-методы, использующие неизвестные классы.

Автор: sergey_85 29.12.2009, 09:31
пасиб!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)