Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jer
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 28
#1

Ошибка : слишком много включаемых файлов - C++

28.12.2013, 21:13. Просмотров 463. Ответов 8
Метки нет (Все метки)

Здравствуйте!
Помогите, пожалуйста, исправить ошибку( С1014 слишком много включаемых файлов).
Не знаю, где лишние .h файлы убрать. Вроде они везде нужны, но какая-то цикличность потом получается...

//main

C++
1
2
3
4
5
6
7
8
9
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include "Desk.h"
#include "ItemController.h"
 
main(){
...
}
//ItemController.h
C++
1
2
3
4
5
6
#include "Item.h"
class ItemController
{
 ...
    Item *Head,*Current;
};
//ItemController.cpp

C++
1
2
3
4
5
6
7
8
#include "stdafx.h"
#include "Desk.h"
#include "ItemController.h"
#include "Item.h"
 
Item *Head,*Current;
 
...
// Item.h
C++
1
2
3
4
5
6
7
8
9
10
11
#include "ItemController.h"
#include "Flower.h"
#include "BagItem.h"
class Item : public ItemController
{
public:
    Item *Next;
    Flower *pFlower;
    BagItem *pBagItem;
...
};
// Item.cpp
C++
1
2
3
4
#include "stdafx.h"
#include "ItemController.h"
#include "Item.h"
...
//Flower.h
C++
1
2
3
4
5
#include "Item.h"
class Flower : public Item
{
...
};
//Flower.cpp
C++
1
2
3
4
5
#include "stdafx.h"
#include "Flower.h"
#include "Item.h"
 
...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка : слишком много включаемых файлов (C++):

Ошибка: слишком много включаемых файлов - C++
Народ подскажите что могло случится с Microsoft Visual C++ 2010 экспресс выпуск. До этого как установил всё нормально работал и...

Fatal error C1014: слишком много включаемых файлов - C++
вот код, пишет что &quot;1&gt;c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(2) : fatal error C1014: слишком много включаемых...

"Слишком много включаемых файлов" - C++
Как исправить ошибку??? слишком много включаемых файлов: глубина = 1024

Ошибка: слишком много инициализаторов - C++
почему пишет error C2078: слишком много инициализаторов (в 10 строке) #include &quot;stdafx.h&quot; #include &quot;math.h&quot; int _tmain(int argc,...

Ошибка "Слишком много аргументов в вызове функции" - C++
Здравствуйте! Подскажите, пожалуйста, как это можно исправить #include &lt;iostream&gt; #include&lt;Windows.h&gt; #include &lt;string.h&gt; using...

Ошибка "Слишком много аргументов в вызове функции" - C++
bool FillMatrix::fillTrim() { int d,ky,h,m; n++; ky=n*n*n; m = n; while (m!=0) { d=m%10; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
28.12.2013, 21:53 #2
Item.h подключает ItemController.h
а ItemController.h подключает Item.h
Для исключения многократного вложения используется такая фишка
Item.h:
C++
1
2
3
4
5
6
#ifndef ITEMH
#define ITEMH
 
// код item.h
 
#endif
и все остальные аналогично
1
Jer
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 28
28.12.2013, 22:10  [ТС] #3
zss, А теперь, пишет что "не определён базовый класс". (у Flower.h и Item.h) это что-то не так с itemController?
(а та ошибка ушла, Спасибо )
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.12.2013, 22:29 #4
C++
1
2
3
4
5
6
#ifndef ITEMH
#define ITEMH
 
// код item.h
 
#endif
вы случайно не везде вот именно эти гуарды воткнули?
для каждого h файла эта штука должна быть уникальна в рамках проекта.
для item.h это ITEMH, для ItemController.h - ITEMCONTROLLERH и т.д.
0
Jer
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 28
28.12.2013, 22:32  [ТС] #5
DU, Конечно, везде разные.
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.12.2013, 22:43 #6
возможно дело в рекурсии инклудов. хотя гуарды вроде как должны сработать. но все равно то, что у вас - это криво.
ItemController.h включает Item.h, а Item.h - включает ItemController.h
в Item.h включение ItemController.h обязательно, т.к. в нем наследование от класса ItemController.
А вот в ItemController.h включение Item.h возможно необязательно. Если там только указатели Item*,
то, возможно, проблема полечится если вы сделаете так:


C++
1
2
3
4
5
6
7
8
9
10
//ItemController.h
//#include "Item.h" // было
class Item;           // стало
class ItemController
{
 ...
    Item *Head,*Current;
};
 
// в cpp файле #include "Item.h" еще можно пережить.
С классами Item и Flower, BagItem - та же проблема.
базовый включает инклудники от классов, которые наследуются от базового.
там проблема может так же полечится (использованием декларации и включением нужного h файла в реализации).

Но вообще лучше все перепроектировать. Так, как сделали вы - не делают. Базовые классы обычно
ничего не знаю о своих наследниках.
1
Jer
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 28
28.12.2013, 22:55  [ТС] #7
DU, вот пытаюсь догадаться, как тут сделать этот полиморфизм, но, похоже, вообще неправильно.
теперь вот такие ошибки появились:
0
Миниатюры
Ошибка : слишком много включаемых файлов  
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.12.2013, 23:02 #8
Это ошибки линковщика. значит компиляция того, что у вас есть прошла успешно.
неразрешенный внешний символ - это не в смысле нельзя использовать, а в смысле не найден.
короче не найдена реализация следующих функций:
Flower::Use()
Item::CreateFlower(int, int)
ItemController::CreateItem(int, int)

убедитесь в том, что они у вас в проекте где-то реализованы, т.е. имеют тело вроде:
C++
1
2
3
4
void Flower::Use()
{
  // ... тут какой-то код
}
1
Jer
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 28
28.12.2013, 23:04  [ТС] #9
DU, Ааа, вот в чём дело. У меня там не все написаны, из-за тех ошибок выше.
Спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2013, 23:04
Привет! Вот еще темы с ответами:

Полиморфизм и ошибка "Слишком много аргументов" - C++
... class Enemy { public: virtual int Damage() // или надо запить virtual int Damage(bool* Foo) { int x; ...

Контроль включаемых заголовочных файлов - C++
Всем привет! У меня родился следующий вопрос: как можно сделать так, чтобы подключаемый файл, при условии, что он уже был ранее...

Слишком много значений инициализатора - C++
Ругается, блин. Говорит, что слишком много значений инициализатора. На втором массиве. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Слишком много знаков в символьной константе - C++
Вот такое дело... Пишу курсовую, наткнулся вот на это... Мне вообще надо записать в файл информацию, записываю Я её, когда получается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.12.2013, 23:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru