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

Поля класса - C++

Восстановить пароль Регистрация
 
oleszka
 Аватар для oleszka
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 13
28.06.2012, 00:28     Поля класса #1
здравствуйте ) извините заранее если глупый вопрос я просто новичок)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class mycl {
       public:
        char  a[], b[];
};
 
int main()
{
        mycl pr;
 
        cin>>pr.a;
        cin>>pr.b;
 
        getch();
        return 0;
}
Поля класса
Почему в экземпляр pr попадает два раза строка "asd". Почему не так - pr: {"qwe","asd"} ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
28.06.2012, 00:54     Поля класса #2
У меня не скопилировалось
error C2229: class 'mycl' has an illegal zero-sized array
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
28.06.2012, 01:37     Поля класса #3
Цитата Сообщение от oleszka Посмотреть сообщение
char *a[], b[];
попробуйте указать длину массива или использовать char * вместо char
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
28.06.2012, 01:55     Поля класса #4
Добавь после считывания cin.ignore()
Все дело в том, что в потоке остается символ '/n' после нажатия Enter и он идет в след. строку.
Да и массивы у тебя чудные. Объявил бы размерность, что ли. Динамические (со *) использовать не советую, с памятью намучаешься.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
28.06.2012, 09:31     Поля класса #5
Цитата Сообщение от MrGluck Посмотреть сообщение
Все дело в том, что в потоке остается символ '/n' после нажатия Enter и он идет в след. строку.
Не спорю,но как он заполняет первый массив второй строкой
Цитата Сообщение от oleszka Посмотреть сообщение
char *a[], b[];
Сделайте так
C++
1
2
3
4
char a[4], b[4];
//размерность 4,так как записываются 3 символа и завершающий нуль-символ
//или можно так
char *a[4], b[4];
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.06.2012, 11:59     Поля класса #6
Цитата Сообщение от oleszka Посмотреть сообщение
class mycl {
* * * *public:
* * * * char *a[], b[];
};
а вы не думали конструктор слелать
C++
1
2
3
4
5
6
7
mycl::mycl(char *s1,char *s2)
{
a=new char[strlen(s1)];
b=new char[strlen(s2)];
strcpy(a,s1);
strcpy(b,s2);
}
Добавлено через 5 минут
oleszka, для переменных типа char* всегда должна быть выделена память если вы хотите работать с ними
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
28.06.2012, 12:02     Поля класса #7
Van111, тогда уж
C++
1
2
3
4
a = new char[strlen(s1) + 1];
b = new char[strlen(s2) + 1];
strcpy(a,s1);
strcpy(b,s2);
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
28.06.2012, 12:52     Поля класса #8
Ну тогда уж надо и деструктор, конструктор копий и оператор присвоения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 15:00     Поля класса
Еще ссылки по теме:

C++ статические поля класса
C++ Вывести поля класса
C++ Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?

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

Или воспользуйтесь поиском по форуму:
oleszka
 Аватар для oleszka
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 13
28.06.2012, 15:00  [ТС]     Поля класса #9
ааааа.. я понял. точно длина!
еще попробую конструктор. СПАСИБо всем )
Yandex
Объявления
28.06.2012, 15:00     Поля класса
Ответ Создать тему
Опции темы

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