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

'const char[i]' to 'char[j]' - C++

Восстановить пароль Регистрация
 
Mgauk
 Аватар для Mgauk
27 / 27 / 1
Регистрация: 03.01.2011
Сообщений: 85
04.01.2011, 04:51     'const char[i]' to 'char[j]' #1
Привет всем.
Усердно изучаю плюсы по Стивену Пратта. В ходе изучения возник вопрос, который в книге не освящён.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
struct bob {
       char name[50];
};
 
int main() {
    bob * ranch = new bob[20];
    ranch[0].name = "Hello!";
    return 0;
}
Почему ranch[0].name = "Hello!"; выбивает ошибку
10 C:\Documents and Settings\Admin\Мои документы\char.cpp incompatible types in assignment of `const char[7]' to `char[50]'
???

Такой вот теоретический вопрос к знатокам С++.
Причём если использовать не (динамический) массив структур, а одну структуру присваивается всё нормально.
Заранее благодарен за помощь. Просто не даёт покоя этот вопрос - дальше учу, а неприятный осадок остаётся от непонимания

PS: Среда Dev-C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
04.01.2011, 05:00     'const char[i]' to 'char[j]' #2
Цитата Сообщение от Mgauk Посмотреть сообщение
Привет всем.
Усердно изучаю плюсы по Стивену Пратта. В ходе изучения возник вопрос, который в книге не освящён.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
struct bob {
       char name[50];
};
 
int main() {
    bob * ranch = new bob[20];
    ranch[0].name = "Hello!";
    return 0;
}
Почему ranch[0].name = "Hello!"; выбивает ошибку

???

Такой вот теоретический вопрос к знатокам С++.
Причём если использовать не (динамический) массив структур, а одну структуру присваивается всё нормально.
Заранее благодарен за помощь. Просто не даёт покоя этот вопрос - дальше учу, а неприятный осадок остаётся от непонимания

PS: Среда Dev-C++
Замени
C++
1
char name[50];
на
C++
1
char* name;
А, вообще, конечно, лучше на
C++
1
const char* name;
либо оставив массив
C++
1
char name[50];
копируй в него
C++
1
strcpy(ranch[0].name, "Hello!");
А, если быть ещё более придирчивым, то: раз пишешь на C++, может уж лучше использовать std::string?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.01.2011, 05:13     'const char[i]' to 'char[j]' #3
И заодно использовать вектор а не динамический массив.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
04.01.2011, 05:45     'const char[i]' to 'char[j]' #4
>Почему ranch[0].name = "Hello!"; выбивает ошибку

имя массива является константным указателем, а ты пытаешься его перенаправить на массив "Hello!"
Mgauk
 Аватар для Mgauk
27 / 27 / 1
Регистрация: 03.01.2011
Сообщений: 85
05.01.2011, 03:19  [ТС]     'const char[i]' to 'char[j]' #5
Всем спасибо за ответы


Цитата Сообщение от NightmareZ Посмотреть сообщение
Замени
C++
1
char name[50];
на
C++
1
char* name;
А, вообще, конечно, лучше на
C++
1
const char* name;
либо оставив массив
C++
1
char name[50];
копируй в него
C++
1
strcpy(ranch[0].name, "Hello!");
Так и делаю, просто была интересна теоретическая сторона моей ошибки

А, если быть ещё более придирчивым, то: раз пишешь на C++, может уж лучше использовать std::string?
Ещё не дочитал до стрингов
Yandex
Объявления
05.01.2011, 03:19     'const char[i]' to 'char[j]'
Ответ Создать тему
Опции темы

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