LINUX.ORG.RU

Курица и яйцо

 , forward declaration,


0

1

Не пойму, это никак нельзя сделать или я что-то делаю не так(зачем- другой вопрос): необходимо, чтобы один класс содержал метод, работающий с другим, а другой, соответственно - с первым. Объявил оба в соответствующих хидерах без include, но в любом случае получается «error: return type 'struct two' is incomplete».

//one.h

#ifndef ONE_H
#define ONE_H
class two;
class one
{
public:
    one();
    two *res;
    two getTwo()
    {
        return *res;
    }
};

#endif // ONE_H

//two.h


#ifndef TWO_H
#define TWO_H
class one;
class two
{
public:
    two();
    one *res;
    one getRes()
    {
        return *res;
    }
};

#endif // TWO_H

★★★★

forward declaration только для указателей и ссылок работает, что естественно.

kulti ★★
()

Возвращай не сам класс, а указатель на него.

KivApple ★★★★★
()
Ответ на: комментарий от wingear

Потому что ничего не известно о классе в то время, т.к. нет инклуда, а указатель это своего рода константа.

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от DELIRIUM

Реализацию геттеров надо вынести в *.cpp файлы, тогда соберётся.

+1, а так - это вполне распространенное решение, рабочее

I-Love-Microsoft ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.