powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос синтаксиса
25 сообщений из 36, страница 1 из 2
Вопрос синтаксиса
    #34489483
Сорри, если баян.

В классе есть
Код: plaintext
1.
const char * const Array[ARRAY_SIZE];
Как его инициализировать? Раз константное поле, значит список инициализации, но массивы он не хавает. Тогда как?
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34489538
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюкСкайУокерСорри, если баян.

В классе есть
Код: plaintext
1.
const char * const Array[ARRAY_SIZE];
Как его инициализировать? Раз константное поле, значит список инициализации, но массивы он не хавает. Тогда как?

Статиком возможно задать?

И вообще, ты что хочешь сдалать? указатель на массив чаров?
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34489567
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что так:
Constructor(...) : Array(ptr) { ... }
По другому никак.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34489646
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюкСкайУокер пишет:
> const char * const Array[ARRAY_SIZE];
>
> Как его инициализировать? Раз константное поле, значит список
> инициализации, но массивы он не хавает. Тогда как?

В конструкторе, в списке инициализации.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34489689
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded, MasterZiv: интересные у вас ответы. :) Автор написал, что у него так не получается, а вы ему говорите, "делай, мол, получится".

Имхо, раз у него не получается, товарищ хочет:

Код: plaintext
1.
const char * const (Array[ARRAY_SIZE]);
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34489721
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за проблема? Мы указатель в конструктор передать не могем?
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34489743
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedА что за проблема? Мы указатель в конструктор передать не могем?

Он хочет массив схавать. По логике вещей, он хочет инициализировать массив указателей. Я так понял из:

ЛюкСкайУокер
...
Как его инициализировать? Раз константное поле, значит список инициализации, но массивы он не хавает. Тогда как?


Т.е. он ошибся в определении типа переменной.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34489775
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понимаю, хотел проинициализировать константный указатель на константную строку - получите, какие массивы. Пусть сам появится и даст кусок кода.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490029
Так, что-то разьрос понятий:)

const char * const Array[ARRAY_SIZE]; - это массив константных указателей на константные строки (хотя мог быть и любой другой тип, не char).

Ну пусть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Example
{
    const char * const Array[ARRAY_SIZE];
public:
    Example();    

};

Example::Example() : Array(??????)       //<<< вот где вопрос!!!       
{
}

1. Перечислить в круглых скобках строки мы не можем (синтаксис не позволяет это).
2. В списке инициализации перечислять Array[0] ("Text0"), Array[1]("Text1") - тоже синтаксически нельзя...
Подбросить в скобках другой аналогичный массив, только не-const? Громозко, да и где его взять.
Да, если оформить static-ом будет проще, интересно понять: неужели С++ не позволяет объявить в классе массив константных указателей?! (ясно, что убрав const перед Array в объявлении, проблема решится легко. Ну а если не убирать!)
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490124
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странное желание. А ежеди так попробовать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
namespace
{
  const char* const arr[] = 
  {
    "String1",
    "String2",
    "String3"
  };
}
Example::Example() : Array(arr)
{
...
}
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490192
Почему всем это кажется странным желанием? :) Неужели не может возникнуть потребность
в массиве строк, который не должен модифицироваться?
А насчет последнего предложенного способа... компилится? студии под рукой нет просто.. Наверно и так можно, но странно, что нет прямого способа, без вспомогательного массива.
Если мы в namespace его объявили, то в составе класса аналогичный ему в принципе-то уже не нужен:)
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490196
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюкСкайУокерТак, что-то разьрос понятий:)

const char * const Array[ARRAY_SIZE]; - это массив константных указателей на константные строки (хотя мог быть и любой другой тип, не char).


имхо, это константный указатель на константный массив из элементов char.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490234
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если это решить через оболочку?

Код: plaintext
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.
class Mass {
        const char * (a[ 2 ]);
    public:
        Mass(char *a1, char *a2) {
            a[ 0 ]=a1;
            a[ 1 ]=a2;
        }
        const char *operator [](int idx) const {
            return a[idx];
        }
        const char *operator [](int idx) {
            return a[idx];
        }
};

class A {
        const Mass mass1;
        Mass mass2;
    public:
        A(char *a1, char *a2) :
        mass1(a1, a2),
        mass2(a1, a2) {}

        void func() {
            printf("%s\n", mass1[ 0 ]);
            printf("%s\n", mass1[ 1 ]);
            printf("%s\n", mass2[ 0 ]);
            printf("%s\n", mass2[ 1 ]);
        }
};

int main() {

    A a("one", "two");

    a.func();

    return  0 ;
};


...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490242
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh пишет:

> const char * const Array[ARRAY_SIZE]; - это массив константных
> указателей на константные строки (хотя мог быть и любой другой тип, не
> char).

> имхо, это константный указатель на константный массив из элементов char.

Не, именно так, как написал blinded.

Можно еще его в конструкторе поэлементно присвоить. В теле.

На самом деле не понятно, зачем константный нестатический массив в
экземпляре объекта класса. И зачем по значению.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490335
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Akh пишет:

> const char * const Array[ARRAY_SIZE]; - это массив константных
> указателей на константные строки (хотя мог быть и любой другой тип, не
> char).

> имхо, это константный указатель на константный массив из элементов char.

Не, именно так, как написал blinded.

Можно еще его в конструкторе поэлементно присвоить. В теле.

На самом деле не понятно, зачем константный нестатический массив в
экземпляре объекта класса. И зачем по значению.
Posted via ActualForum NNTP Server 1.4

1. Согласен. Специально проверил. [] приоритетней
2. Нельзя. Указатели константны.
3. Возможно от объекта к объекту данные должны различаться.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490631
Sandro_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюкСкайУокерПочему всем это кажется странным желанием? :) Неужели не может возникнуть потребность
в массиве строк, который не должен модифицироваться?
..........................

Я считаю что потребность в таком массиве возникнуть не может.
Не понимаю зачем может понадобиться копия неизменяемого массива для каждого объекта класса?
Массив надо просто сделать статическим членом класса и все.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490695
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, косяк, студия прямо говорит: «не могу явно инициализировать массивы»
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490700
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandro_KНе понимаю зачем может понадобиться копия неизменяемого массива для каждого объекта класса?
Массив надо просто сделать статическим членом класса и все.почему копия? Просто неизменяемый массив. Неизменяемым его делают очевидно затем, чтобы его далее нельзя было изменить. Статик не подходит ежу сказали, почему.
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490710
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh пишет:
> 3. Возможно от объекта к объекту данные должны различаться.
А вот это верно - не подумал.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490720
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo пишет:
> почему копия? Просто неизменяемый массив. Неизменяемым его делают
> очевидно затем, чтобы его далее нельзя было изменить. Статик не подходит
> ежу сказали, почему.

Но вообще согласен. Можно в объектах сделать ссылки, и их ссылать
на что-то статическое. Которое уже инициализировать.

А вообще, может автор топика поделится, зачем ему такое нужно ?
В чем реальная потребность ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490808
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странно, сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int arr1[ 3 ]={ 1 , 2 , 3 };

class Class1
{
  public:
	  int arr[ 3 ];
	  Class1();
};

Class1::Class1(): arr(arr1)
{
}
всё равно не инициализирует
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34490940
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни хрена мы не знаем. Вот g++ четко сказал
ISO C++ forbids assigment of array
Так что нечего выеживаться, надо делать на все
const char* const* Array;
не не совсем эквивалентно, зато инициализируется без проблем
Хошь так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
namespace
{
  const char* const arr[] = 
  {
    "String1",
    "String2",
    "String3"
  };
}
Example::Example() : Array(arr)
{
...
}

// или так

Example::Example(const char*const arr) : Array(cloneArray(arr)) {}
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34491114
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со втроенными массивами эта штука не выйдет, а вот написать что-то, что вело бы себя как втроенные массивы можно:

Код: plaintext
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.
45.
46.
template<typename T, size_t N>
struct array
{
	enum {size = N};
	T a[N];
	operator T*() {return a;}
	operator T const *() const {return a;}
};

template<typename T>
array<T,  1 > make_array(T a)
{
	array<T,  1 > tmp = {a};
	return tmp;
}

template<typename T>
array<T,  2 > make_array(T a, T b)
{
	array<T,  2 > tmp = {a, b};
	return tmp;
}

template<typename T>
array<T,  3 > make_array(T a, T b, T c)
{
	array<T,  3 > tmp = {a, b, c};
	return tmp;
}

// ... можно продолжить и дальше эту интересную последовательность :)

class foo
{
	enum {N =  3 };
	array<const char *, N> const arr;
public:
	foo() : arr(make_array<const char *>("1", "2", "3")) {}	
};

int main()
{

	foo f;

	return  0 ;
}
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34491468
LisFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюкСкайУокерСорри, если баян.

В классе есть
Код: plaintext
1.
const char * const Array[ARRAY_SIZE];
Как его инициализировать? Раз константное поле, значит список инициализации, но массивы он не хавает. Тогда как?

Никак.

М. Эллис, Б. Строуструп
"Справочное руководство по языку программирования С++ с комментариями",
Москва "МИР" 1992,
стр. 289, цитата:
"Нет, ..., синтаксиса для инициализации члена,
являющегося нестатическим константным массивом."
...
Рейтинг: 0 / 0
Вопрос синтаксиса
    #34491510
Если честно, в моем случае потребности в не-static нет (класс все равно singleton:)) Стало интересно, не ожидал что С++ не поддерживает такой синтаксис. Наверно если понадобится в каждом экземпляре свой массив указателей, который не должен модифицироваться, то проще наваять класс массива и агрегировать указатель на константный объект этого класса.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос синтаксиса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]