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

Выражение должно иметь тип указателя - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.96
pifko
 Аватар для pifko
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 11
31.10.2012, 21:14     Выражение должно иметь тип указателя #1
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
struct laiks {
    int h;
    int m;
    int s;
};
 
int main()
{ 
//1.piemers
laiks b;
cout<<"Ievadiet laiku h m s"<<endl;
cin>>b.h>>b.m>>b.s;
getch();
 
//2.piemers
laiks a[2];
for(int i=0;i<2;i++) {
cout<<"Ievadiet "<<i<<". laiku h m s"<<endl;
cin>>a[i].h>>a[i].m>>a[i].s;
}
getch();
 
//3.piemers
laiks* s;
cout<<"Ievadiet laiku h m s";
cin>>s->h>>s->m>>s->s;
delete s;
getch();
 
//4.piemers
int n=2;
laiks *m = new laiks[2];
for(int i=0;i<n;i++) {
cout<<"Ievadiet "<<i<<". laiku h m s"<<endl;
cin>>m[i]->h>>m[i]->m>>m[i]->s;
}
getch();
delete[] m;
}
по синтаксису вроде всё правильно, не пойму что значит эта ошибка, буду благодарен если кто-то укажет в каком направлении искать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 21:14     Выражение должно иметь тип указателя
Посмотрите здесь:

Нужно отформатировать текст находящийся в файле: каждое предложение должно иметь порядковый номер и начинаться с красной строки C++
C++ Ошибка выражение должно иметь константное значение
Выражение должно иметь тип класса. Да ну? C++
Выражение должно иметь тип указателя на объект C++
Узнать тип значения, зная тип указателя C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
31.10.2012, 21:17     Выражение должно иметь тип указателя #2
40-вая строка, должно быть так
C++
1
cin>>m[i].h>>m[i].m>>m[i].s;
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
31.10.2012, 21:19     Выражение должно иметь тип указателя #3
40 строку надо так cin>>m[i].h>>m[i].m>>m[i].s;
pifko
 Аватар для pifko
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 11
31.10.2012, 21:25  [ТС]     Выражение должно иметь тип указателя #4
странно, возможно я ошибся записывая слова преподавателя, но разве не -> используются для присваивания значений, когда память выделяется динамически ?
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
31.10.2012, 21:32     Выражение должно иметь тип указателя #5
C++
1
2
3
4
5
6
//3.piemers
laiks* s;
cout<<"Ievadiet laiku h m s";
cin>>s->h>>s->m>>s->s;
delete s;
getch();
еще тут память выделить надо
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
31.10.2012, 21:34     Выражение должно иметь тип указателя #6
Цитата Сообщение от pifko Посмотреть сообщение
C++
1
2
3
4
5
laiks* s;
cout<<"Ievadiet laiku h m s";
cin>>s->h>>s->m>>s->s;
delete s;
getch();
C++
1
2
3
4
5
laiks* s = new laiks;
cout<<"Ievadiet laiku h m s";
cin>>s->h>>s->m>>s->s;
delete s;
getch();
pifko
 Аватар для pifko
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 11
31.10.2012, 21:37  [ТС]     Выражение должно иметь тип указателя #7
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
2
3
4
5
laiks* s = new laiks;
cout<<"Ievadiet laiku h m s";
cin>>s->h>>s->m>>s->s;
delete s;
getch();
с этим то я ошибся из за не внимательности, но всё равно спасибо), главный вопрос до сих пор остается без ответа ?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
31.10.2012, 21:37     Выражение должно иметь тип указателя #8
Цитата Сообщение от pifko Посмотреть сообщение
но разве не -> используются для присваивания значений, когда память выделяется динамически ?
такая запись используется для указателей, хочется стрелку пишите (m+i)->h и т.д.
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
31.10.2012, 21:37     Выражение должно иметь тип указателя #9
pifko, стрелочка это просто автоматическое разыменование указателя, то есть
C++
1
(*a).x
коротко записывается как
C++
1
a->x
pifko
 Аватар для pifko
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 11
31.10.2012, 21:40  [ТС]     Выражение должно иметь тип указателя #10
Цитата Сообщение от Psilon Посмотреть сообщение
pifko, стрелочка это просто автоматическое разыменование указателя, то есть
C++
1
(*a).x
коротко записывается как
C++
1
a->x
разве в коде переменная m не указатель ?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
31.10.2012, 21:41     Выражение должно иметь тип указателя #11
Запись m[i] эквивалентна разименованию *(m+i)
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
31.10.2012, 21:42     Выражение должно иметь тип указателя #12
m[i] эквивалентна *(m+i), и если m у вас указатель, то m[i] уже сам элемент, и поэтому нужно применять . (точку), а не ->
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
31.10.2012, 21:44     Выражение должно иметь тип указателя #13
pifko, m - поле структуры типа int, никакой не указатель
pifko
 Аватар для pifko
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 11
31.10.2012, 21:47  [ТС]     Выражение должно иметь тип указателя #14
Цитата Сообщение от Psilon Посмотреть сообщение
pifko, m - поле структуры типа int, никакой не указатель
всегда казалось что звёздочка после типа данных при инициализации переменной значит что это указатель
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
31.10.2012, 21:48     Выражение должно иметь тип указателя #15
C++
1
2
3
4
5
struct laiks {
    int h;
    int m;
    int s;
};
где тут звездочка?
А то что у вас и поле и массив названы одним именем и это вас путает - ваши проблемы.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
31.10.2012, 21:48     Выражение должно иметь тип указателя #16
Psilon,
Цитата Сообщение от pifko Посмотреть сообщение
int n=2;
laiks *m = new laiks[2];
for(int i=0;i<n;i++) {
cout<<"Ievadiet "<<i<<". laiku h m s"<<endl;
cin>>m[i]->h>>m[i]->m>>m[i]->s;
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
31.10.2012, 21:49     Выражение должно иметь тип указателя #17
kazak, см.выше
pifko
 Аватар для pifko
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 11
31.10.2012, 21:58  [ТС]     Выражение должно иметь тип указателя #18
вопрос в другом, если применить строчку laiks *m=new laiks[n];
то m это не указатель ?

P.S. я не пытаюсь здесь развести спор, я в этом деле новичок, просто хочу разобраться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 22:07     Выражение должно иметь тип указателя
Еще ссылки по теме:

Работа с текстами/строки. Error: выражение должно иметь тип класса C++
C++ Выражение должно иметь тип класса в Visual Studio
Ошибка выражение должно иметь тип указателя на объект C++

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

Или воспользуйтесь поиском по форуму:
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
31.10.2012, 22:07     Выражение должно иметь тип указателя #19
pifko, переменная типа массив - это указатель на первый элемент массива, только и всего. Ну и наоборот соответственно.
записи
C++
1
laiks m[]=new laiks[n];
и
C++
1
laiks *m=new laiks[n];
эквивалентны
Yandex
Объявления
31.10.2012, 22:07     Выражение должно иметь тип указателя
Ответ Создать тему
Опции темы

Текущее время: 19:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru