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

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

Войти
Регистрация
Восстановить пароль
 
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
#1

Связанные классы - C++

31.12.2012, 08:06. Просмотров 821. Ответов 10
Метки нет (Все метки)

Есть несколько классов,каждый объект которого имеет объект другого класса в качестве элемента данных
Это класс Dictionary,в состав которого входит элемент класса Tree и наоборот
Код не компилируется из-за того,что в файле с определением класса Dictionary есть элемент класса Tree и компилятор ругается,что нет такого класса
ExDict.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef DICTIONARY_H
#define DICTIONARY_H
 
class Tree;
class DictionaryManager;
 
#include "StdAfx.h"
#include "Tree.h"
#include "DictionaryManager.h"
 
#include<Windows.h>
 
 
class Dictionary
{
    friend class Tree;
    friend class DictionaryManager;
 
    public:
 
    Dictionary(string DictName)
    {
        CurrentDictionary = DictName;
 
        DataTree->CurrentDict = this;
    }
 
    
    bool correct(ID *id);//проверяем корректность введённого ID слова
    bool DeleteWord();//удаляем слово /ещё не реализовано!!!
    //---------------------------
 
 
    //функции для работы с данными словаря
    //---------------------------
    bool LoadData();//загрузить данные из словаря
    bool WriteData();//записать данные в словарь
    bool WriteNewPrimaryWord(DATA *New);//записываем новое основное слово
    bool WriteNewAssociatedWord(string NewAssociatedWord,unsigned int position);//записать в файл словаря новое ассоциированное слово
    bool WriteNewID(ID NewID,unsigned int position);//записать в файл словаря новый ID слова
    void SortByAlphabet(vector<DATA *> &SortedWords, TreeNode *ptr);
    void SortByPosition(map<unsigned int, DATA, less<unsigned int>> &SortedTree, TreeNode *ptr);
    //---------------------------
 
    
 
    private:
    string          CurrentDictionary;//название текущего словаря
 
    Tree *          DataTree;//дерево с данными о словах
};
 
#endif DICTIONARY_H

Tree.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef TREE_H
#define TREE_H
 
class Dictionary;
class DictionaryManager;
 
#include "StdAfx.h"
#include "TreeNode.h"
#include "ExDict.h"
 
class Tree
{
friend class Dictionary;
friend class DictionaryManager;
 
public:
    //конструктор,указываем лишь,что изначально кол-во слов равно 0
    Tree()
    {
        RootNode        = NULL;
        CurrentDict     = NULL;
        CountOfWords    = 0;
    }
    
    ~Tree()
    {
        ReleaseMemory(RootNode);
    }
 
    //вставить новый узел в древо
    int InsertNode(DATA *NewNode);
 
    //добавить новое ассоциированное слово
    int InsertAssociatedWord(
        string NewAssociatedWord,//ассоциируемое слово
        string PrimaryWord);//основное слово,к которому мы добавляем
    
    //добавить новый ID основного слова
    int InsertNewID(
        ID NewID,//новый ID
        string PrimaryWord);//основное слово,к которому мы добавляем
 
    //поиск слова
    int FindWord(
        string Word,//слово,которое ищем
        DATA *WordData);//переменная,в которую записываем информацию о найденном слове
 
    void ReleaseMemory(TreeNode *CurrentNode);//освобождаем память,выделенную для узлов дерева
 
private:
    Dictionary  *CurrentDict;//текущий словарь
    TreeNode    *RootNode;//корневой узел
    unsigned int CountOfWords;//кол-во слов в дереве
};
 
#endif TREE_H

Собственно ошибки компилятора
1>d:\projects\dictionary\dictionary\exdict.h(24): error C2027: использование неопределенного типа "Tree"
1> d:\projects\dictionary\dictionary\treenode.h(4): см. объявление "Tree"
1>d:\projects\dictionary\dictionary\exdict.h(24): error C2227: выражение слева от "->CurrentDict" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1> ExMenuForDictionary.cpp
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2012, 08:06     Связанные классы
Посмотрите здесь:

Связанные списки - C++
Вопросы в комментариях #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; using namespace std; class NameDataSet { ...

связанные списки - C++
плиз помогите написать задачку: Запросить у пользователя число n. Построить связный список из n элементов, заполненный случайными...

Связанные списки - C++
Составить программу, работающую со связанными списками. Мы будем рассматривать связанный список как объект, содержащий связанный список...

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

Ошибки в коде, связанные с boost - C++
ошибки начинаются сразу после использования matrix почему, ее нет? вот ссылка на сайт исходника...

Ошибки связанные с односвязным списком - C++
Здравствуйте... Решила сама разобраться и написать программу, связанную с работой с односвязным списком. Для красоты решила оформить каждое...

Связанные списки (переделать программу) - C++
Как переделать программу, чтобы можно было вводить самому ключи и не было Access Violation? #include &lt;iostream&gt; #include &lt;time.h&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
31.12.2012, 09:10     Связанные классы #2
Реализацию класса в отдельный *.cpp
Или попробуйте поменять порядок включения файлов в main.cpp
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
31.12.2012, 09:29  [ТС]     Связанные классы #3
реализация в различных *.cpp файлах
попробую,может в этом дело
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
31.12.2012, 11:58     Связанные классы #4
Ну вот смотрите как получается:
Где-то включается фаил tree.h
доходим до строчки #include "ExDict.h"
включается фаил ExDict.h
доходим до #include "Tree.h", но TREE_H уже определена, поэтому ничего не включится.
продолжаем включение tree.h
Итого после препроцессора получим:
1) class Dictionary - Опережающее объявление
2) class Tree - Опережающее объявление
3) class Dictionary - Объявление класса
4) class Tree - Объявление класса.

В объявлении класса Dictionary у Вас есть конструктор:
C++
1
2
3
4
5
6
    Dictionary(string DictName)
    {
        CurrentDictionary = DictName;
 
        DataTree->CurrentDict = this;
    }
Если посмотреть на порядок включения файлов, то видно, что в пункте 3(объявление класса Dictionary) известно, что класс Tree существует, но ничего не известно про его поля и функции, т.к. его полное объявление идет далее в пункте 4. Поэтому и возникает ошибка.
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
01.01.2013, 06:22  [ТС]     Связанные классы #5
Спасибо!Вы были правы,я разместил #include "ExDict.h" в файле Tree.h после объявления класса и теперь всё замечательно
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
01.01.2013, 08:30     Связанные классы #6
Цитата Сообщение от alexey31415 Посмотреть сообщение
Спасибо!Вы были правы,я разместил #include "ExDict.h" в файле Tree.h после объявления класса и теперь всё замечательн
Всё-таки лучше выносить реализацию класса в отдельный фаил *.cpp
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
01.01.2013, 09:42  [ТС]     Связанные классы #7
так у меня и так всё в отдельных файлах *.cpp
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
01.01.2013, 12:23     Связанные классы #8
Цитата Сообщение от alexey31415 Посмотреть сообщение
так у меня и так всё в отдельных файлах *.cpp
а это что?
C++
1
2
3
4
5
6
    Dictionary(string DictName)
    {
        CurrentDictionary = DictName;
 
        DataTree->CurrentDict = this;
    }
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
02.01.2013, 01:26  [ТС]     Связанные классы #9
только конструктор и деструктор,всё остальное в отдельных файлах
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.01.2013, 03:43     Связанные классы #10
Цитата Сообщение от alexey31415 Посмотреть сообщение
только конструктор и деструктор,всё остальное в отдельных файлах
Ну так конструктор с деструктором тоже в *.cpp запихните
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 04:04     Связанные классы
Еще ссылки по теме:

Двумерный массив (связанные области) - C++
Здравствуйте! Такой вопрос: Есть двумерный массив частично заполненный буквами. как его считать чтобы получить два слова (БАВ, ГВ)? Как...

Односвязанные и двух-связанные списки - C++
Должны быть следующие функции: 1) Ввод количества элементов и заполнение списка случайными значениями 2) Вывод списка на экран 3)...

Стандартные потоки и связанные с ними исключения - C++
Хочу задать выброс исключений если что-то с потоком не так, мне это и удалось, но я не могу очистить поток после этого. Код: #include...

Подскажите как отладить код (связанные списки) - C++
условие закомментировано в коде, подскажите, в чём ошибка? функция Sum Должна возвращать требуемое число // ВЫЧИСЛЯЕТ СУММУ ТЕХ ЭЛЕМЕНТОВ...

Не компилируется проект, возникают ошибки связанные с файлами .cpp - C++
Создаю класс, но IDE (VS 2015 Community) не хочет собирать проект, пишет разного рода ошибки: FirstSFMLGame.cpp: #include...


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

Или воспользуйтесь поиском по форуму:
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
02.01.2013, 04:04  [ТС]     Связанные классы #11
привычка писать в объявлени класса
Yandex
Объявления
02.01.2013, 04:04     Связанные классы
Ответ Создать тему
Опции темы

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