Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте, возник такой вопрос, как следует писать код, чтобы 2 не зависимых класса могли использовать друг друга?
Вот к примеру код
Code
1
2
3
4
5
6
7
8
9
10
#include <iostream.h>
 
#include "2.h"
#include "1.h"
 
int main()
{
    one o;
    return 0;
}
Code
1
2
3
4
5
6
class one
{
public:
    one(){t = new two;cout<<"one"<<endl;};
    two *t;
};
Code
1
2
3
4
5
6
class two
{
public:
    two(){cout<<"two"<<endl;};
//  one *o;
};
Таким образом все работает. Но если в классе 2 добавить объект класса 1, то выскакивают ошибки.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.05.2009, 17:26
Ответы с готовыми решениями:

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

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

Совместное использование sptintf и std::string
Хотелось бы получить форматированную строку в переменной типа std::string, Максимально простым способом. Подскажите как это лучше...

9
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
02.05.2009, 17:36
Приведи код, который не работает, а то не очень понятно, что значит добавить объект 1 класса.
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
02.05.2009, 18:21  [ТС]
Ну видишь, в классе 2 закомментировано
// one *o;
Нужно его туда добавить, но если это сделать вот просто так, то ошибки вылазят. Нужно видимо, какой-то особый метод.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
02.05.2009, 18:28
C++
1
2
3
4
5
6
7
class one;
class two
{
public:
    two(){cout<<"two"<<endl;};
    one *o;
};
Так попробуй
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
02.05.2009, 18:33
напиши какой-нить .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, от млин... не заметил))
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
02.05.2009, 21:36  [ТС]
Ага это сработало, но вот с более сложным классом
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
Тоесть в итоге все, что я мудрил это сделал, что оно работает методом подключения друг друга, но тогда не как это все подключить к Мэйну. Вернувшись к чему начал получаю ту же ошибку.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
02.05.2009, 21:47
вообще-то у вас ошибки в листингах: после конструкторов точка с запятой не ставится.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
03.05.2009, 00:30
Вынесите реализацию всех методов в .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;
}
1
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
03.05.2009, 00:36
Цитата Сообщение от ISergey Посмотреть сообщение
Проверь
правда не знал....
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
04.05.2009, 11: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)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2009, 11:10
Помогаю со студенческими работами здесь

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Совместное использование класса в нескольких проектах (библиотека классов)
Всем доброго времени суток. Что-то никак не могу найти ответ на мой вопрос. Может кто здесь подскажет. Хочу создать библиотеку...

Совместное использование БД
Вопрос знатокам: Сколько пользователей может совместно использовать БД через сетевую папку ?

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

Совместное использование C++ Builder и VS C++
Привет! Можно ли использовать C++ Builder и VS C++ совместно. Ну, допустим, C++ Builder для создания пользовательского интерфейса и...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru