Тут уже однажды кто-то зафигачил себе один заголовок, который подключал остальные, да еще с внешними гардами, да еще с циклическими зависимостями. Помнится, пару
недель его глюкало, никак не хотал смириться. Если тебя интересует "почему" :
(прагмы я заменил стражами включения)
A.h
#ifndef A_INCLUDED
#define A_INCLUDED
#include"B.h"class A
{
public:
void fun(B b)
{
b.some();
}
void some(){}
};
#endif
B.h
#ifndef B_INCLUDED
#define B_INCLUDED
#include"A.h"class B
{
public:
void fun(A a)
{
a.some();
}
void some(){}
};
#endif
стрелкой показаны подключенные файлы, составляющие в итоге единицу трансляции
main.cpp
#include"A.h" -----> #ifndef A_INCLUDED //да, истина, включаем текст A.h#define A_INCLUDED
#include"B.h"-----------------------------> #ifndef B_INCLUDED //да, истина, включаем текст B.h#define B_INCLUDED
#include"A.h"----------------------------------------------->#ifndef A_INCLUDED //уже определен, не текст не включаетсяclass B{
public:
void fun(A a){a.some();} //все, ошибка, что такое А - неизвестно.#endif
Дальше уже неважно.
Of course, the code must be complete enough to compile and link.
Маленький вопросик по плюсам!!!
От:
Аноним
Дата:
28.07.05 17:13
Оценка:
Вчера видимо перепил маленько, весь день не могу разобрать, где ошибка?
//------------------------------main.cpp------------------------------
#pragma once
#include "A.h"
#include "B.h"
void main()
{
}
//------------------------------A.h------------------------------
#pragma once
#include "B.h"
class A
{
float plus(B &op);
};
//------------------------------B.h------------------------------
#pragma once
#include "A.h"
class B
{
float plus(A &op);
};
Re: Маленький вопросик по плюсам!!!
От:
Аноним
Дата:
28.07.05 17:18
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Вчера видимо перепил маленько, весь день не могу разобрать, где ошибка?
А>//------------------------------main.cpp------------------------------ А>#pragma once
А>#include "A.h" А>#include "B.h"
А>void main() А>{
А>}
А>//------------------------------A.h------------------------------ А>#pragma once
А>#include "B.h"
А>class A А>{ А> float plus(B &op);
А>};
А>//------------------------------B.h------------------------------ А>#pragma once
А> class A;
А>class B А>{ А> float plus(A &op);
А>};
Вместо включения в заголовке а заголовка б, ограничься предварительным объявлением класса class B;(ведь определение функции у тебя не в заголовке же? вот там,
где оно, и включай). Ну и в б не включай а, а используй предварительное объявление class A.
А то у тебя мешанина какая-то с попыткой циклического включения
да еще и с прагмой.
Of course, the code must be complete enough to compile and link.
Re[2]: Маленький вопросик по плюсам!!!
От:
Аноним
Дата:
28.07.05 17:47
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Вместо включения в заголовке а заголовка б, ограничься предварительным объявлением класса class B;(ведь определение функции у тебя не в заголовке же? вот там, L_L>где оно, и включай). Ну и в б не включай а, а используй предварительное объявление class A. L_L>А то у тебя мешанина какая-то с попыткой циклического включения L_L>да еще и с прагмой.
Определение функции у меня как раз в заголовке (инлайница она у меня)
Re[3]: Маленький вопросик по плюсам!!!
От:
Аноним
Дата:
28.07.05 18:00
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>>Вместо включения в заголовке а заголовка б, ограничься предварительным объявлением класса class B;(ведь определение функции у тебя не в заголовке же? вот там, L_L>>где оно, и включай). Ну и в б не включай а, а используй предварительное объявление class A. L_L>>А то у тебя мешанина какая-то с попыткой циклического включения L_L>>да еще и с прагмой.
А>Определение функции у меня как раз в заголовке (инлайница она у меня)
Of course, the code must be complete enough to compile and link.
Re[4]: Маленький вопросик по плюсам!!!
От:
Аноним
Дата:
28.07.05 18:23
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Что, обе в заголовках определены?
Да, определены все в заголовках.
Внизу приведен законченный пример. Как поступить в этом случае?
Я хотел бы знать, по какому правилу компилятор ругается?