Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/50: Рейтинг темы: голосов - 50, средняя оценка - 4.78
1 / 1 / 2
Регистрация: 06.11.2011
Сообщений: 68

Недопустимое использование типа в качетве выражения С++

28.02.2012, 23:45. Показов 9448. Ответов 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
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include <iostream>
using namespace std;
#include<string.h>
 
class Cmen{
protected:
 char *f;              //Familija
 char *n;              //Name
 char *o;              //Father
public:
 Cmen();
 ~Cmen();
 void input( void );
 void output( void );
 void operator=( Cmen & ) ;
};
 
class CIndivid:public Cmen{
protected:
 char *a;              //Adress
 int t;                //Telephone
public:
 CIndivid();
 ~CIndivid();
 void output( void );
 void input( void );
 void operator=( CIndivid & ) ;
 friend void sort_Individ( CIndivid *p , int r );
 friend void add( CIndivid *p , int r );
};
 
Cmen::Cmen(){
      f=new ( char [10] );
      n=new ( char [10] );
      o=new ( char [10] );
      f ='\0';
      n ='\0';
      o ='\0';
 }
CIndivid::CIndivid():t( 0 ){
          a= new ( char [50] );
          *a= '\0';
}
 
CIndivid::~CIndivid(){
           delete[] a;
}
 
Cmen::~Cmen(){
       delete[] f;
       delete[] n;
       delete[] o;
 }
 
void Cmen::input( void ){
        cout << "Enter familia" << endl ;
         cin >> f ;
        cout << "Enter name" << endl ;
         cin >> n ;
        cout << "Enter father" << endl ;
         cin >> o ;
        cout << "" << endl ;
}
 
void CIndivid::input( void ){
            Cmen::input() ;
            cout << "Enter adress" << endl ;
             cin >> a ;
            cout << "Enter telephone" << endl ;
             cin >> t ;
            cout << "" << endl ;
}
 
void Cmen::output( void ){
         cout << f << " " << n << " " << o << endl ;
}
 
void CIndivid::output( void ){
             Cmen::output();
             cout  << " Adress " << a << endl ;
             cout << " Telephon "  << t << endl << endl ;
 
}
 
void all_output( CIndivid *p ){
           for( int i=0 ; i<50 ; i++ ){
          p[i].CIndivid::output();
          }
}
void Cmen::operator=( Cmen &z2 )
{
           strcpy( f, z2.f ) ;
           strcpy( n, z2.n ) ;
           strcpy( o, z2.o ) ;
}
 
void CIndivid::operator=( CIndivid &z2 ){
            operator=( Cmen &z2 ) ;
            strcpy( a, z2.a ) ;
            t=z2.t ;
}
 
void sort_Individ( CIndivid *p, int r ){
         int i,s ;
         CIndivid k ;
         do { s=0;
            for( i=0 ; i<r ; i++ ){
               if( strcmp( p[i].f , p[i+1].f )>0 )
             k=p[i+1];
             p[i+1]=p[i];
             p[i]=k;
             s=1;
               }
            }while( s==1 );
}
 
void add( CIndivid *p , int r ){
    int c , x=0, i ;
    cout << " Enter skilky objektiv dodaty : " ;
     cin >> x ;
    for( i=0 ; i<r ; i++ ){
       if( p[i].f=='\0' )
         break ;
       }
    for(  c=0 ; c<x ; c++ ){
       p[i+c].input();
       }
}
 
void Deleted( CIndivid *p , int r ){
        int q=0;
        cout << " Enter jakyj ojekt potribno delete : " << endl ;
        cin >> q ;
        for( int i=q ; i<r ; i++ ){
        p[i]=p[i+1] ;
 }
}
 
int menu_pere( CIndivid *p ){
          while( 1 ){
           char u ;
           cout << " all_output { 1 }" << endl ;
           cout << " sort_Individ { 2 } " << endl ;
           cout << " add_object { 3 } " << endl ;
           cout << " Deleted_object { 4 } " << endl ;
           cout << " EXIT { 5 }" << endl << endl ;
           u=getch();
           switch( u ){
             case '1' : all_output( p ) ;        getch();
             case '2' : sort_Individ( p , 50 ) ;  break ;
             case '3' : add( p , 50 ) ;           break ;
             case '4' : Deleted( p , 50 ) ;       break ;
             case '5' : return 0 ;
             }
            }
}
 
void main(){
 CIndivid s[50];
 menu_pere( s );
getch();
}
Вибивает ошибку в строке 102:
error C2275: Cmen: недопустимое использование этого типа в качестве выражения

Как решаеться проблемма? Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2012, 23:45
Ответы с готовыми решениями:

"Недопустимое использование этого типа в качестве выражения"
Вот, у меня есть код (просто создаёт пустое окно без ничего), который без проблем собирается и выполняется на c++, но никак не хочет...

DataGridViewAdvancedCellBorderStyle: недопустимое использование этого типа в качестве выражения
Подскажите пожалуйста из-за чего формируется эта ошибка в коде удаления границы ячейки таблицы DataGridView? private: void...

Error C1017: недопустимое константное выражение целого типа
в общем был у меня такой код: ... #if numeric_limits&lt;T&gt;::is_integer typedef long long (Type); #else typedef long double...

6
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
29.02.2012, 00:16
нужен вызов функции. а эта строка выглядит как объявление функции. Cmem& там лишнее.
но чтобы позвался базовый оператор, надо явно прописать какой оператор зовется:
C++
1
Cmen::operator=(z2);
1
1 / 1 / 2
Регистрация: 06.11.2011
Сообщений: 68
29.02.2012, 01:12  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
нужен вызов функции. а эта строка выглядит как объявление функции. Cmem& там лишнее.
но чтобы позвался базовый оператор, надо явно прописать какой оператор зовется:
C++
1
Cmen::operator=(z2);
Спасибо!
К сожалению, не работает функция добавления данных. Пишет:

Можете написать правильный код данной функции?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
29.02.2012, 01:34
В студии хороший дебагер. Учитесь пользоваться.

исправленный конструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Cmen::Cmen(){
          f=new ( char [10] );
          n=new ( char [10] );
          o=new ( char [10] );
          f[0] ='\0';
          n[0] ='\0';
          o[0] ='\0';
          // или так
          //*f ='\0';
          //*n ='\0';
          //*o ='\0';
          // но не так. тут обнуляются указатели.
          //f ='\0';
          //n ='\0';
          //o ='\0';
 }
1
1 / 1 / 2
Регистрация: 06.11.2011
Сообщений: 68
29.02.2012, 16:08  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
В студии хороший дебагер. Учитесь пользоваться.

исправленный конструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Cmen::Cmen(){
          f=new ( char [10] );
          n=new ( char [10] );
          o=new ( char [10] );
          f[0] ='\0';
          n[0] ='\0';
          o[0] ='\0';
          // или так
          //*f ='\0';
          //*n ='\0';
          //*o ='\0';
          // но не так. тут обнуляются указатели.
          //f ='\0';
          //n ='\0';
          //o ='\0';
 }
Поменял, но все равно результата нету
В дебагере, точке останова на cin>f пишет:

Помогите мне, пожалуйста, дописать данную программу
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
29.02.2012, 22:36
В дебагере есть еще вкладка Call Stack (в руссом варианте наверно стек вызовов). На картинке вашей не вижу. В общем найдите такую вкладку и используйте тоже. В ней можно увидеть откуда мы пришли в функцию, и какие там были значения переменных.

По поводу ошибки с cin >> f;
Такое только в функции Cmen::input, которая вызывается из функции
void add( CIndivid *p , int r )
Ок, смотрим туда:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void add( CIndivid *p , int r ){
 
  // Дебагер говорит, что r == 50; т.е. размеру массива.
 
        int c , x=0, i ;
        cout << " Enter skilky objektiv dodaty : " ;
         cin >> x ;
        for( i=0 ; i<r ; i++ ){
           if( p[i].f=='\0' )
             break ;
           }
 
  // После этого цикла i будет равно r, т.е. 50.
 
        for(  c=0 ; c<x ; c++ ){
           // p[i + c]  -- с + i всегда больше 50 т.е. тут выход за пределы массива.
           // Это и есть ошибка.
           p[i+c].input();
           }
}
1
1 / 1 / 2
Регистрация: 06.11.2011
Сообщений: 68
01.03.2012, 21:02  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
В дебагере есть еще вкладка Call Stack (в руссом варианте наверно стек вызовов). На картинке вашей не вижу. В общем найдите такую вкладку и используйте тоже. В ней можно увидеть откуда мы пришли в функцию, и какие там были значения переменных.

По поводу ошибки с cin >> f;
Такое только в функции Cmen::input, которая вызывается из функции
void add( CIndivid *p , int r )
Ок, смотрим туда:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void add( CIndivid *p , int r ){
 
  // Дебагер говорит, что r == 50; т.е. размеру массива.
 
        int c , x=0, i ;
        cout << " Enter skilky objektiv dodaty : " ;
         cin >> x ;
        for( i=0 ; i<r ; i++ ){
           if( p[i].f=='\0' )
             break ;
           }
 
  // После этого цикла i будет равно r, т.е. 50.
 
        for(  c=0 ; c<x ; c++ ){
           // p[i + c]  -- с + i всегда больше 50 т.е. тут выход за пределы массива.
           // Это и есть ошибка.
           p[i+c].input();
           }
}
Гм... Как же решить проблему? Можете написать код?

Добавлено через 22 часа 1 минуту
Ребят, помогите кто-нибудь, пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2012, 21:02
Помогаю со студенческими работами здесь

Ошибка Объект Session, ASP 0168 (0x80004005) Недопустимое использование объекта
Вобщем идея такова: Пользователь логинится и логин заганяется в сесию: Session('name') = Request('userName');И что вы думаете ?? Вот...

Ошибка: "Недопустимое использование скобок при вызове процедуры Sub"
Добрый день. Пытаюсь сделать замену внутри цикла, и в итоге при запуске скрипта мне выдает ошибку, что недопустимо использование скобок при...

Недопустимое использование оператора "PRINT", оказывающего побочное действие, в функции
Функция должна считать факториал, но выводит ошибку: Сообщение 443, уровень 16, состояние 14, процедура factorial, строка 13 ...

Недопустимое значение. Параметр типа "T" должен быть контравариантно действителен
Помогите пожалуйста выдаёт ошибку (Недопустимое значение. Параметр типа &quot;T&quot; должен быть контравариантно действителен) не знаю что делать ...

Использование указателей при вызове функций: "error C2100: недопустимое косвенное обращение"
Просьба помочь с пониманием указателей в функциях. Переползаю с delphi, поэтому просьба сильно не пинать. Есть большая программа,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru