Зацикленный #include

Yoh18041995

Помогите плиз.
У меня есть два моих класса в проге на с++ 6.0.
В целом эти классы независимы, но в них должны быть функции для поддержки друг друга.
Если я пишу include только в одном из них на другой, то этот другой не видит класса, которые его подключает (точнее h-файла, где находится описание класса если я ставлю include в обоих, то происходит ошибка (строго говоря , куча ошибок).
Знает кто-нибудь, как бороться с взаимными инклюдами?

maggi14

а не пробовал юзать
#ifndef XITRAYA_STROKA_CHTOBY_NE_POVTORYATSYA_05_04_19
#define XITRAYA_STROKA_CHTOBY_NE_POVTORYATSYA_05_04_19
...
#endif
?

Ivan8209


openssl rand 64 -base64 | tr -cd '[:alpha:]'
?
---
...Я работаю антинаучным аферистом...

Elina74


openssl rand 64 -base64 | tr -cd '[:alpha:]'
"openssl" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

rosali

А ты в _одном_ файле можешь определения этих классов в каком-нибудь порядке выписать, чтобы компилировалось? А то может ты не ту проблему решаешь. Например, совсем недавно в студии нельзя было _в принципе_ вот такое сделать
 
struct A
{
B f;
};
struct B
{
A f;
};
То есть ни форвард декларации не помогали ничего. Студия считала, что для того, чтобы возвращать class C по значению, нужно чтобы этот класс был уже определен. Сейчас слава богу поправили. Но в других компиляторах тоже разные проблемы могут быть.

Yoh18041995

// A.h
class A
{.....
int funcA(B);
}
int A::funcA(B b)
{
return 0;
}
// B.h
class B
{
....
int funcB(A a);
}
int B::funcB(A a)
{
return 0;
}
Как заставить это работать?

enochka1145

Это шутка?
Надо написать class B; перед определением класса A и/или class A; перед определением класса B.

garikus

classes.cpp:

class A
{
int funcA(class B *b)
{
return 0;
}
};

int main
{
return 0;
}
classes1.cpp:

class B
{
int funcB(class A *a)
{
return 0;
}
};
?

Dasar

//a.h.h

class A;

//a.h

#include "b.h.h"

class A
{.....
int funcA(B);
}
int A::funcA(B b)
{
return 0;
}

//b.h.h

class B;

//b.h

#include "a.h.h"

class B
{
....
int funcB(A a);
}

int B::funcB(A a)
{
return 0;
}

rosali

Я вот кстати не уверен, что для передачи A _по значению_ не требуется _определение_ класса.

Dasar

> Я вот кстати не уверен, что для передачи A _по значению_ не требуется _определение_ класса.
Определение класса требуется, когда необходимо знать, какой размер в памяти будет занимать класс.
При объявлении функции, в которую передается класс по значению - размер знать не надо.
Размер надо знать только когда компилируется тело функции.

Yoh18041995

Сенкс.
Итак, окончательный упрощенный вариант, если кому интересно.
class B;
class A
{... fA(B); ...};
class B
{... fB(A); ...};
B::fB(A a) {return 0;}
A::fA(B b) {return 0;}
Таким образом класс A уже знает о том, что существует некий класс B.
Реализацию самой функции (fA) пришлось разместить всё таки после фактического описания класса B.
(То есть в конце B.h)
Проблема решена, всем спасибо за помощь.

Flack_bfsp

Студия считала, что для того, чтобы возвращать class C по значению, нужно чтобы этот класс был уже определен. Сейчас слава богу поправили.
А что ж в этом хорошего, что она стала плохой стиль программирования поддерживать? Покажи мне кусок кода, где реально требуется возвращение класса по значению и без этого никак?

bleyman

Vector
Оставить комментарий
Имя или ник:
Комментарий: