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

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

Войти
Регистрация
Восстановить пароль
 
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
#1

Совместное использование классов - C++

02.05.2009, 17:26. Просмотров 915. Ответов 9
Метки нет (Все метки)

Здравствуйте, возник такой вопрос, как следует писать код, чтобы 2 не зависимых класса могли использовать друг друга?
Вот к примеру код
Код
#include <iostream.h>

#include "2.h"
#include "1.h"

int main()
{
	one o;
	return 0;
}
Код
class one
{
public:
	one(){t = new two;cout<<"one"<<endl;};
	two *t;
};
Код
class two
{
public:
	two(){cout<<"two"<<endl;};
//	one *o;
};
Таким образом все работает. Но если в классе 2 добавить объект класса 1, то выскакивают ошибки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2009, 17:26     Совместное использование классов
Посмотрите здесь:

Совместное использование cin и geline - C++
У меня возник один не очень сложный вопрос, но ,кроме обмана компилятора, я не смог найти решение) Так вот: string name; int a;...

Совместное использование указателей и ссылок - C++
int *ptr; int &amp;ref = *ptr; ref = 1; Вот и весь вопрос. Ничего плохого в этом нет?

Использование классов - C++
Расскажите пожалуйста на кокретных примерах как и где модно использовать классы?

Использование классов - C++
Здравствуйте господа программисты. Помогите мне пожалуста. В Курсовой есть такое задание: &quot;Создать телефонную книгу&quot; Программный проект...

Использование классов - C++
Разработать заголовочный файл, содержащий описание соответствующего класса, функции и операторы. Описание функций-членов класса разместить...

Использование классов - C++
Класс Члены класса Методы Операторы перегрузки Исходные данные Матрица Размерность ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2009, 17:36     Совместное использование классов #2
Приведи код, который не работает, а то не очень понятно, что значит добавить объект 1 класса.
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
02.05.2009, 18:21  [ТС]     Совместное использование классов #3
Ну видишь, в классе 2 закомментировано
// one *o;
Нужно его туда добавить, но если это сделать вот просто так, то ошибки вылазят. Нужно видимо, какой-то особый метод.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
02.05.2009, 18:28     Совместное использование классов #4
C++
1
2
3
4
5
6
7
class one;
class two
{
public:
    two(){cout<<"two"<<endl;};
    one *o;
};
Так попробуй
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
02.05.2009, 18:33     Совместное использование классов #5
напиши какой-нить .h файл... там напиши:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class one;
class two;
 
class one
{
public:
    one(){t = new two;cout<<"one"<<endl;};
    two *t;
};
 
class two
{
public:
    two(){cout<<"two"<<endl;};
    one *o;
};
т.е. смысл в том, чтобы
C++
1
2
class one;
class two;
было написано до описания классов.

Добавлено через 57 секунд
ISergey, от млин... не заметил))
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
02.05.2009, 21:36  [ТС]     Совместное использование классов #6
Ага это сработало, но вот с более сложным классом
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
#include <iostream>
#include <string>
#include "huff.h"
#include "tree.h"
 
#define ALPHABETSIZE 256
using namespace std;
 
int main() 
{
    Huffman h;
    //Tree2 *t = new Tree2;
    /*Huffman h;
    string str = "to be or not to be?";       // ??????? ??????
    int data[] = new int[str.lengh()];       // ??????????? ? ??????
    for (int i=0; i<str.lengh(); i++) 
        data[i]=(unsigned char)str[i]; 
    h.growTree( data );                       // ?????? ??????
    h.makeCode();                             // ??????? ????
    str = h.coder(data);
    cout<<str<<endl;
    cout<<h.decoder(str)<<endl;*/
    return 0;
}
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <string>
using namespace std;
#define ALPHABETSIZE 256
class Tree;
class Huffman
{
public:
    Huffman()
    {
        tree = new Tree;
        weights = new int[ALPHABETSIZE];
        code = new string[ALPHABETSIZE];
    };
 
    Tree *tree;     // ??????? ?????? ????????
    int *weights;   // ???? ????????
    string *code;   // ???? ????????
 
    /*int getLowestTree(int used)                       // ???? ????? "??????" ??????
    {
        int min=0;
        for (int i=1; i<used; i++)
            if (tree[i].weight < tree[min].weight ) 
                min = i;
        return min;
    }
 
    void growTree( int[] data )                         // ?????? ??????
    {    
        for (int i=0; i<data.length; i++)               // ??????? ???? ????????
            weights[data[i]]++;
                                                        //  ????????? ?????? ?? "????????" ????????
        int used = 0;                                   //  ? ??????????????? ?????????
        for (int c=0; c < ALPHABETSIZE; c++) 
        {
            int w = weights[c];
            if (w != 0) 
                tree[used++] = new Tree(c, w, true);
        }
        while (used > 1)                                // ?????? ??????? ?????? ????? 
        {                    
            int min = getLowestTree( used );            // ???? 1 ?????
            int weight0 = tree[min].weight;
            Tree temp = new Tree();                     // ??????? ????? ??????
            temp.child0 = tree[min];                    // ? ????????? 1 ?????
            tree[min] = tree[--used];                   // ?? ????? 1 ????? ??????
                                                        // ????????? ?????? ? ??????
            min = getLowestTree( used );                // ???? 2 ????? ?
            temp.child1 = tree[min];                    // ????????? ?? ? ???.???.
            temp.weight = weight0 + tree[min].weight;   // ??????? ??? ???.???.
            tree[min] = temp;                           // ???.???. ?????? ?? ????? 2 ?????
        }                                               // ???! ???????? 1 ?????? ????????
    }
 
    void makeCode()                                     // ????????? ?????????? ????? ????????
    {
        tree[0].traverse( "", this);
    }
 
    string coder( int[] data )                          // ???????? ?????? ??????? ?? 1 ? 0
    { 
        string str = "";
        for (int i=0; i<data.length; i++) 
            str += code[data[i]];
        return str;
    }
 
    string decoder(String data) 
    {
        string str="";                                  // ????????? ? ????? ?????? ?? ?????????
        int l = 0;                                      // ????, ???? ??, ?? ??????????? ??? ...
        while(data.length() > 0)
        {
            for (int c=0; c < ALPHABETSIZE; c++) 
                if (weights[c]>0 && data.startsWith(code[c]))
                {
                    data = data.substring(code[c].length(), data.length());
                    str += (char)c;
                }
        }
        return str;
    }*/
};
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
#include <string>
using namespace std;
class Huffman;
class Tree
{
public:
    Tree *child0;   // ??????? "0" ? "1"
    Tree *child1;
    bool leaf;      // ??????? ????????? ??????
    int character;  // ??????? ??????
    int weight;     // ??? ????? ???????
    Tree()
    {
        cout<<"gen"<<endl;
    };
    Tree(int ch, int w, bool lf) 
    {
        leaf = lf;
        character = ch;
        weight = w;
    };
 
/*  ????? ?????? ? ?????????? ?????
    1. "???????????" ???????? ?????? ? ???????? ??? ???????? ? ??????
    2. ?????????? ?????? ????? ????????? (? ?????????????? ????).
    3. ?????????? ?????? ?????? ?????????.
*/
    void traverse(string code, Huffman h) 
    {
        if (leaf) 
        {
            cout<<(char)character<<"  "<<weight<<"  "<<code<<endl;
            h.code[character] = code;
        }
        if ( child0 != NULL) 
            child0->traverse(code + "0", h);
        if ( child1 != NULL) 
            child1->traverse(code + "1", h);
    }
};
uff.h(10) : error C2512: 'Tree' : no appropriate default constructor available
Тоесть в итоге все, что я мудрил это сделал, что оно работает методом подключения друг друга, но тогда не как это все подключить к Мэйну. Вернувшись к чему начал получаю ту же ошибку.
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
02.05.2009, 21:47     Совместное использование классов #7
вообще-то у вас ошибки в листингах: после конструкторов точка с запятой не ставится.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
03.05.2009, 00:30     Совместное использование классов #8
Вынесите реализацию всех методов в .cpp файлы. Тоесть в huff.cpp и tree.cpp,
Потом в huff.cpp подключайте tree.h, а в tree.cpp подключите huff.h

вообще-то у вас ошибки в листингах: после конструкторов точка с запятой не ставится.
Проверь

C++
1
2
3
4
5
6
7
8
9
10
class Employee{
public:
    Employee() {};
 
};
int main ()
{
    Employee em;
    return 0;
}
Monte-Cristo
2788 / 1374 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
03.05.2009, 00:36     Совместное использование классов #9
Цитата Сообщение от ISergey Посмотреть сообщение
Проверь
правда не знал....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2009, 11:10     Совместное использование классов
Еще ссылки по теме:

Использование классов - C++
Не хочет запускаться, помогите найти ошибку #include &lt;iostream&gt; #define N 5 using namespace std; class electronic_store { ...

Использование классов - C++
Составить программу для объявления и использования данных типа класс согласно индивидуальному заданию, Базовый (транспортное средство) ...

Использование классов (sha1) - C++
В sha1.h /* sha1.h */ #ifndef SHA1_H #define SHA1_H #include &lt;stdint.h&gt; #ifdef __cplusplus extern &quot;C&quot; { ...

Использование классов Worda - C++
Необходимо подключить библиотеку Ворда и использовать ее классы и методы. Не знаю как описать класс. Спасибо


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

Или воспользуйтесь поиском по форуму:
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
04.05.2009, 11:10  [ТС]     Совместное использование классов #10
Выходит еще больше ошибок.
Оно не видит ни данные класса ни методы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "huff.h"
 
void Tree::traverse(string code, Huffman h) 
    {
        if (leaf) 
        {
            cout<<(char)character<<"  "<<weight<<"  "<<code<<endl;
            h.code[character] = code;
        }
        if ( child0 != NULL) 
            child0->traverse(code + "0", h);
        if ( child1 != NULL) 
            child1->traverse(code + "1", h);
    }
--------------------Configuration: none - Win32 Debug--------------------
Compiling...
none.cpp
c:\program files\microsoft visual studio\vc98\myprojects\none\huff.h(15) : error C2143: syntax error : missing ';' before '*'
c:\program files\microsoft visual studio\vc98\myprojects\none\huff.h(15) : error C2501: 'Tree' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\vc98\myprojects\none\huff.h(15) : error C2501: 'tree' : missing storage-class or type specifiers
tree.cpp
c:\program files\microsoft visual studio\vc98\myprojects\none\huff.h(15) : error C2143: syntax error : missing ';' before '*'
c:\program files\microsoft visual studio\vc98\myprojects\none\huff.h(15) : error C2501: 'Tree' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\vc98\myprojects\none\huff.h(15) : error C2501: 'tree' : missing storage-class or type specifiers
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(3) : error C2653: 'Tree' : is not a class or namespace name
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(5) : error C2065: 'leaf' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(7) : error C2065: 'cout' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(7) : error C2065: 'character' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(7) : error C2297: '<<' : illegal, right operand has type 'char [3]'
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(7) : error C2065: 'weight' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(10) : error C2065: 'child0' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(11) : error C2227: left of '->traverse' must point to class/struct/union
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(12) : error C2065: 'child1' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\none\tree.cpp(13) : error C2227: left of '->traverse' must point to class/struct/union
Error executing cl.exe.

none.exe - 16 error(s), 0 warning(s)
Yandex
Объявления
04.05.2009, 11:10     Совместное использование классов
Ответ Создать тему
Опции темы

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