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

Как инициализировать массив строк в конструкторе - C++

Восстановить пароль Регистрация
 
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
01.06.2014, 08:23     Как инициализировать массив строк в конструкторе #1
File.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CTest
{
    public:
 
        char* m_pszText[ 3 ];
 
        CTest(  )
        {
            char* m_pszText[ 3 ] =
            {
                "Andrei", 
                "Anton", 
                "Alex"
            };
 
            printf( "DEBUG: %s\n", m_pszText[ 2 ] );
        }
 
        void Init( );
};
Тут я получаю строку, всё в порядке.

File.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CTest Test;
 
int main(int argc, char *argv[])
{
    Test.Init( );
 
    return getchar();
}
 
 
void CTest::Init( )
{
    printf( "DEBUG: %s\n", m_pszText[ 2 ] );
}
Строка пустая.

DEBUG: Alex
DEBUG: (null)
В чем проблема и как правильно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
01.06.2014, 08:26     Как инициализировать массив строк в конструкторе #2
В конструкторе создается локальный массив, который и инициализируется строками. Поле класса остается без изменений.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
01.06.2014, 08:27  [ТС]     Как инициализировать массив строк в конструкторе #3
То есть глобальную переменную в классе ни как не инициализировать?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
01.06.2014, 08:34     Как инициализировать массив строк в конструкторе #4
Попробую еще по-другому сказать словами...
В конструкторе создается локальный массив. Не создавайте его, а обращайтесь сразу к полю класса.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
01.06.2014, 08:39  [ТС]     Как инициализировать массив строк в конструкторе #5
А как ?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
01.06.2014, 08:47     Как инициализировать массив строк в конструкторе #6
Как и к любым другим переменным...
C++
1
2
3
4
5
CTest(  )
{
  m_pszText[0] = "foo";
  ...            
}
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.06.2014, 11:21     Как инициализировать массив строк в конструкторе #7
Только всё же не стоит забывать, что указатель должен быть на const char. Т.к. память под изменяемые строки нигде не выделяется.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
01.06.2014, 11:43  [ТС]     Как инициализировать массив строк в конструкторе #8
Tulosba, я вас не понял,а что плохого, что может произойти?
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.06.2014, 12:00     Как инициализировать массив строк в конструкторе #9
pEntity, изменять строки, указатели на которые хранятся в вашем массиве нельзя (т.к. строки могут и, скорее всего, будут размещены в памяти только для чтения), поэтому следует добавить к ним const, чтобы с точки зрения языка они тоже были константны.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 12:18     Как инициализировать массив строк в конструкторе
Еще ссылки по теме:

Как инициализировать массив в классе C++
Как инициализировать массив в dll ? C++
Как мне инициализировать данные в конструкторе C++

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

Или воспользуйтесь поиском по форуму:
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
01.06.2014, 12:18  [ТС]     Как инициализировать массив строк в конструкторе #10
Ага, теперь понятно. Спасибо :-)
Yandex
Объявления
01.06.2014, 12:18     Как инициализировать массив строк в конструкторе
Ответ Создать тему
Опции темы

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