Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для Lewis_Husk
0 / 0 / 1
Регистрация: 28.03.2012
Сообщений: 13

Функция друг

22.05.2012, 20:02. Показов 801. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня проблемы с преобразованием типов для функции друг(а может и не сними) компилятор говорит: request for member `getname' in `*((+(((unsigned int)i) * 4u)) + array)', which is of non-class type `Detail*' . Я пытался наобум изменять значения типов и прочие радости, но ничего данным шаманством не получилось сделать. Прощу вас, объяснить, где же я простреливаю себе ногу?
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <cstring>
using namespace std;
 
//Basic class Detail
class Detail
{
public:
    Detail(const char* name, int firm);
    virtual ~Detail() {}
    virtual void Display();                     //view data for party of detail
    friend int sum(Detail* array,int n);            //all number of details for name of detail
    const char* getname();
 
protected:
    char name[80];//name of detail
    int firm;     //digit of workshop
};
 
Detail::Detail(const char* _name, int _firm) : firm(_firm)
{
    strncpy(name, _name, 80);
}
 
const char* Detail::getname() { return name; };
 
void Detail::Display()
{
    cout << "Detail, name is - " << name << endl;
    cout << "Firm is - "         << firm << endl;
}
 
//Child of Detail Detail1
class Detail1 : public  Detail
{
public:
    Detail1(const char*, int, bool);
    ~Detail1(){};
    void Display();//view data for party of detail
    friend int sum(Detail** array,int n);
 
private:
    bool coating;
};
 
Detail1::Detail1(const char* _name, int firm, bool _coating) : Detail(_name, firm), coating(_coating)
{
    strncpy(name, _name, 80);
}
 
void Detail1::Display()
{
    cout << "Detail1, name is -"<< name         << endl;
    cout << "Firm is -"         << firm         << endl;
    cout << "Coated is  -"      << coating      << endl;
}
 
//Child of Detail Detail2
class Detail2 : public  Detail
{
public:
    Detail2(const char*, int, float);
    ~Detail2(){}
    void Display();
    friend int sum(Detail** array,int n);
 
private:
    float resist; //digit of detail2 resist
};
 
Detail2::Detail2(const char* _name, int _firm, float _resist) : Detail(_name, firm), resist(_resist)
{
    strncpy(name, _name, 80);
}
 
void Detail2::Display()
{
    cout << "Detail2, name is - " << name   << endl;
    cout << "Firm is - "          << firm   << endl;
    cout << "Resistance - "       << resist << endl;
}
 
int sum(Detail** array,int n)
{
    char name[80];
    int k=0;
        cout << "Input name: "; cin>>name;
    for(int i=0; i<n; i++)
        if(strcmp(array[i].getname(),name)==0)
                        {k++;}
            cout<<k;
}
 
int main()
{
    int nMenu, flag = 1, N;
    int i = 0; //The new
    int n;
    Detail* p[100];
    cout <<"\nNumbers of details: ";    cin >> N;
    while(i < N && flag)
    {
        //Menu
        cout << "\nNew detail. Enter: " << endl; 
        cout << "1-for detail,2-detail1,3-detail2,4 - sum, 5 - exit\n"; 
        cin >> nMenu;
        string name; int firm; bool coating; float resist;
        if(nMenu > 0 && nMenu < 4)
        {
            cout << "Name?(char) "; cin >> name; cout << endl;
            cout << "Firm?(digit) "; cin >> firm; cout << endl;
        }
        switch (nMenu)
        {
            case 1 :
                p[i++] = new Detail(name.c_str(), firm);
                break;
 
            case 2 :
                cout << "Coated?(1-yes, 0-no) "; cin >> coating; cout << endl;
                p[i++] = new Detail1(name.c_str(), firm, coating);
                break;
 
            case 3 :
                cout << "Resistance? "; cin >> resist; cout << endl;
                p[i++] = new Detail2(name.c_str(), firm, resist);
                break;
            case 4:
                cout << "Sum! - "; cout<<sum(p,n);      
            default : flag = 0; break;
        }
    }
    for (int id = 0; id < N; id++)
    {
        p[id]->Display();
        delete p[id];
    }
    cin.get();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2012, 20:02
Ответы с готовыми решениями:

функция - друг
Вообщем набиваю руку по конструкторам ,деструкторам и функциям - друзьям... Вот придумал условие: Нужно найти сумму элементов в тех...

функция друг, перегрузка <<
Доброго времени суток, Господа! Имеется следующий код: class Time { private: int hours; int minutes;...

Функция друг принимает три аргумента
Когда функция друг принимает два аргумента, проблем нет, как только появляется третий, &quot;Error: отсутствуют экземпляры перегруженная...

4
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
22.05.2012, 20:24
Не вдаваясь в прочие детали, сразу замечу: надо было написать array[i]->getname(); вместо array[i].getname()
"Простреливание ноги" - метафора, относящаяся к ошибкам времени выполнения, а не времени компиляции.
0
 Аватар для Lewis_Husk
0 / 0 / 1
Регистрация: 28.03.2012
Сообщений: 13
27.05.2012, 19:28  [ТС]
Бамп. Теперь компиляция и сборка проходит нормально, а вот с функцией до сих пор проблемы, при запросе названия Детали, программа прекращает работу.

Думаю у меня алгоритмическая ошибка, а её я обнаружить воообще не могу. "Функция-друг, позволяющая вычислить общее количество изделий указанного наименования." Может мне нужно было идти по другому пути, подскажите, пожалуйста.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <cstring>
using namespace std;
 
//Basic class Detail
class Detail
{
public:
    Detail(const char* name, int firm);
    virtual ~Detail() {}
    virtual void Display();                     //view data for party of detail
    [COLOR="Lime"]friend int sum(Detail* array,int n);          //all number of details for name of detail
    const char* getname();[/COLOR]
 
protected:
    char name[80];//name of detail
    int firm;     //digit of workshop
};
 
Detail::Detail(const char* _name, int _firm) : firm(_firm)
{
    strncpy(name, _name, 80);
}
 
const char* Detail::getname() { return name; };
 
void Detail::Display()
{
    cout << "Detail, name is - " << name << endl;
    cout << "Firm is - "         << firm << endl;
}
 
//Child of Detail Detail1
class Detail1 : public  Detail
{
public:
    Detail1(const char*, int, bool);
    ~Detail1(){};
    void Display();//view data for party of detail
    friend int sum(Detail** array,int n);
 
private:
    bool coating;
};
 
Detail1::Detail1(const char* _name, int firm, bool _coating) : Detail(_name, firm), coating(_coating)
{
    strncpy(name, _name, 80);
}
 
void Detail1::Display()
{
    cout << "Detail1, name is -"<< name         << endl;
    cout << "Firm is -"      << firm        << endl;
    cout << "Coated is  -"      << coating      << endl;
}
 
//Child of Detail Detail2
class Detail2 : public  Detail
{
public:
    Detail2(const char*, int, float);
    ~Detail2(){}
    void Display();
    friend int sum(Detail** array,int n);
 
private:
    float resist; //digit of detail2 resist
};
 
Detail2::Detail2(const char* _name, int _firm, float _resist) : Detail(_name, firm), resist(_resist)
{
    strncpy(name, _name, 80);
}
 
void Detail2::Display()
{
    cout << "Detail2, name is - " << name   << endl;
    cout << "Firm is - "          << firm   << endl;
    cout << "Resistance - "       << resist << endl;
}
 
int sum(Detail** array,int n)
{
    char name[80];
    int k=0;
        cout << "Input name: "; cin>>name;
    for(int i=0; i<n; i++)
       if(strcmp(array[i]->getname(),name)==0)
            {k++;}      
            cout<<k;
            return 0;
}
 
int main()
{
    int nMenu, flag = 1, N;
    int i = 0; //The new
    int n;
    Detail* p[100];
    cout <<"\nNumbers of details: ";    cin >> N;
    while(i < N && flag)
    {
        //Menu
        cout << "\nNew detail. Enter: " << endl; 
        cout << "1-for detail,2-detail1,3-detail2, 4- sum 0 - exit\n"; 
        cin >> nMenu;
        string name; int firm; bool coating; float resist;
        if(nMenu > 0 && nMenu < 4)
        {
            cout << "Name?(char) "; cin >> name; cout << endl;
            cout << "Firm?(digit) "; cin >> firm; cout << endl;
        }
        switch (nMenu)
        {
            case 1 :
                p[i++] = new Detail(name.c_str(), firm);
                break;
 
            case 2 :
                cout << "Coated?(1-yes, 0-no) "; cin >> coating; cout << endl;
                p[i++] = new Detail1(name.c_str(), firm, coating);
                break;
 
            case 3 :
                cout << "Resistance? "; cin >> resist; cout << endl;
                p[i++] = new Detail2(name.c_str(), firm, resist);
                break;
            default : flag = 0; break;
        }
    }
    cout<<sum(p,n);
    for (int id = 0; id < N; id++)
    {
        p[id]->Display();
        delete p[id];
    }
    cin.get();
}
Миниатюры
Функция друг  
0
 Аватар для Lewis_Husk
0 / 0 / 1
Регистрация: 28.03.2012
Сообщений: 13
01.06.2012, 16:21  [ТС]
Bump. Ниасиливаю.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
01.06.2012, 16:35
строка 132
C++
1
cout<<sum(p,n);
переменная n не инициализирована.
учитесь пользоваться дебагером.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.06.2012, 16:35
Помогаю со студенческими работами здесь

Функция-друг одно класса, член другого.
Привет. Не поможете как сделать чтобы функция одного класса была функцией-другом другого класса? я сделал так: Класс snake: ...

Функция-друг не видит члены класса private
#include &lt;iostream&gt; using namespace std; class Phone{ friend ostream &amp; operator&lt;&lt;(ostream&amp;,const Phone&amp;); private: int number; ...

Функция, возвращающая х случайных, не равных друг другу, чисел из диапазона от y до z
Нужна функция желательно на разных языках (С, С++, perl, php) которая бы возвращала х случайных не равных друг другу чисел из диапазона...

Функция проверяющая, являются ли два числа зеркальным отражением друг друга
3. Написать подпрограмму, которая принимает два числа в качестве параметров и проверяет, являются ли они зеркальным отражением друг друга...

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
&lt;?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла yoo.txt'; } while (false !== ($char =...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru