С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
WriterMix
1 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 68
#1

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

28.02.2012, 23:45. Просмотров 2413. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2012, 23:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Недопустимое использование типа в качетве выражения С++ (C++):

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

Использование неопределённого типа - C++
Использование неопределённого типа &quot;monsters&quot;. Игра не дописанная, помогите решить ошибку!#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; ...

Использование выражений типа a == b == c; - C++
Скажите, можно ли использовать такие выражения и как они работают? Почему такая конструкция дает истину только когда все переменные...

Использование файлового типа данных - C++
Всем прив:) Дан файл F1, который содержит номера телефонов сотрудников учреждения: указываеться фамилия сотрудника, его инициалы и...

Использование шаблонного типа в shared_ptr - C++
Здравствуйте, я решил поупражняться на С++ и написать свой двунаправленный список: Node.h #pragma once #include &quot;stdafx.h&quot; using...

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

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

исправленный конструктор:
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
WriterMix
1 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 68
29.02.2012, 16:08  [ТС] #5
Цитата Сообщение от 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
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.02.2012, 22:36 #6
В дебагере есть еще вкладка 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
WriterMix
1 / 1 / 0
Регистрация: 06.11.2011
Сообщений: 68
01.03.2012, 21:02  [ТС] #7
Цитата Сообщение от 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
01.03.2012, 21:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2012, 21:02
Привет! Вот еще темы с ответами:

Использование переменной типа char в цикле for - C++
Ребята, подскажите пожалуйста, как использовать 8-ми битную переменную в цикле for? Неправильный пример - for(char i = 0; i &lt; N; i++)

IntelliSense: использование имени типа не допускается - C++
Model.h #pragma once class ModelClass { private: ModelClass(void); ~ModelClass(void); static ModelClass* playInstance;

Нюансы синтаксиса: использование объектов типа ofstream - C++
Куда нужно дописать std:: ? #include &lt;iostream&gt; #include &lt;fstream&gt; int main (void){ ofstream file; file.open...

Использование strlen для объектов типа string - C++
Подскажите пожалуйста, как strlen использовать на string.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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