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

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

Войти
Регистрация
Восстановить пароль
 
pEntity
50 / 45 / 5
Регистрация: 12.12.2012
Сообщений: 808
#1

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

01.06.2014, 08:23. Просмотров 372. Ответов 9
Метки нет (Все метки)

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

Как инициализировать массив строк? - C++
Здравствуйте, подскажите как инициализировать массив строк, кол-во строк неизвестно, они будут загружаться из текстового файла. И как...

Как мне инициализировать данные в конструкторе - C++
//Файл содержит определение функций класса Invoice #include <iostream> using std::cout; using std::endl; #include <string> ...

Инициализировать массив строк типа std::string - C++
Есть массив из строк, надо присвоить ему значения. Возникла странная проблема. Вот код: string StrName; i = 1; while ( i...

Ошибка: Нельзя инициализировать статические данные в конструкторе - C++
Ошибка: Нельзя инициализировать статические данные в конструкторе. //#include <string.h> #include <stdio.h> //#include <conio.h> ...

Как инициализировать глобальную переменную в зависимости от количества строк в файле - C++
Есть переменная типа int glob = 3; объявлена в не main(), т.е. глобальная. После неё, тоже не в mаin, объявлены структуры ex: struct...

Как инициализировать массив в dll ? - C++
Экспериментирую с dll. Сделал графическую функцию, которая рассчитывает расстояние между точками в цикле. Хочу оптимизировать ее, чтоб...

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

Как инициализировать массив в классе - C++
private: static char const figury_={0,4,0,0, 0,1,0,3, 2,1,0,3, 0,2,0,2, 1,2,0,2, ...

Как инициализировать массив переменной - C++
Всем доброго времени суток! у меня возникла проблема, мне нужно инициализировать статический массив с помощью переменной, т.е. пользователь...

Можно ли как-то инициализировать массив? - C++
Можно ли как-то инициализировать массив ar? class digit { int a, b; public: digit (int a_, int b_) { a=a_; b=b_; }

Как инициализировать такой массив - C++
Нужно в проге(консольное приложение Win32) испоьзовать массив таких размеров double massiv_resultatov={0}; просто так я не смог его...


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

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

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