powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как задать значение переменной, которая определяет длину массива?
5 сообщений из 5, страница 1 из 1
Как задать значение переменной, которая определяет длину массива?
    #39650518
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В h- файле объявлена структура с полем Client:
Код: plaintext
1.
2.
3.
4.
5.
6.
//extern const int LengthOfClient;
struct allData final
{
//static const int LengthOfClient;
char Client[LengthOfClient];
};



Я пробовал перед объявлением структуры объявить глобальную переменную (и определить в cpp- файле), создать статическое поле структуры (и также определить в cpp- файле), но все равно получаю ошибку:

Код: plaintext
1.
2.
array bound is not an integer constant before ‘]’ token
         char Client[LengthOfClient];


^

Как задать размер массива?
...
Рейтинг: 0 / 0
Как задать значение переменной, которая определяет длину массива?
    #39650521
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

Так не годится. Ведь ты, фактически, полагаешься на линковщик, который свяжет переменную с реальным значением из какого-то .cpp файла или библиотеки, которая будет доступна в момент загрузки бинаря. Но это нужно самому компилятору, каждый раз когда очередная единица трансляции включает в себя этот хедер, она должна точно определить размер структуры по имеющимся данным, а, получается, что размер валяется в какой-то левой единице трансляции.
Неужели просто до объявления структуры нельзя сделать что-то например
Код: plaintext
1.
2.
3.
4.
5.
const int LengthOfClient = 3;
struct allData final
{
char Client[LengthOfClient];
};


Учти, что размер должен быть обязательно вычислябельным и детерминированным на этапе компиляции.
...
Рейтинг: 0 / 0
Как задать значение переменной, которая определяет длину массива?
    #39650524
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZAlekseySQL,

Так не годится. Ведь ты, фактически, полагаешься на линковщик, который свяжет переменную с реальным значением из какого-то .cpp файла или библиотеки, которая будет доступна в момент загрузки бинаря. Но это нужно самому компилятору, каждый раз когда очередная единица трансляции включает в себя этот хедер, она должна точно определить размер структуры по имеющимся данным, а, получается, что размер валяется в какой-то левой единице трансляции.
Неужели просто до объявления структуры нельзя сделать что-то например
Код: plaintext
1.
2.
3.
4.
5.
const int LengthOfClient = 3;
struct allData final
{
char Client[LengthOfClient];
};


Учти, что размер должен быть обязательно вычислябельным и детерминированным на этапе компиляции.

Спасибо, но у меня этот h- файл потом в несколько мест инклюдится и поэтому получится множественное определение. Использовать неименованные пространства имен также не получится: в других модулях мне надо знать размер массива (чтобы организовывать циклы).
...
Рейтинг: 0 / 0
Как задать значение переменной, которая определяет длину массива?
    #39650529
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLСпасибо, но у меня этот h- файл потом в несколько мест инклюдится и поэтому получится множественное определение. Использовать неименованные пространства имен также не получится: в других модулях мне надо знать размер массива (чтобы организовывать циклы).
Ты точно уверен в том, что у тебя получается множественное определение, тебе линкер об этом сказал?
Глобальные const объекты в C++ имеют внутреннюю линковку, если не объявлены как extern.
http://eel.is/c draft/basic.link#3 A name having namespace scope has internal linkage if it is the name of
(3.1)
a variable, function or function template that is explicitly declared static; or,
(3.2)
a non-inline variable of non-volatile const-qualified type that is neither explicitly declared extern nor previously declared to have external linkage ; or
(3.3)
a data member of an anonymous union.
...
Рейтинг: 0 / 0
Как задать значение переменной, которая определяет длину массива?
    #39650533
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZТы точно уверен в том, что у тебя получается множественное определение, тебе линкер об этом сказал?
Глобальные const объекты в C++ имеют внутреннюю линковку, если не объявлены как extern.
http://eel.is/c draft/basic.link#3A name having namespace scope has internal linkage if it is the name of
(3.1)
a variable, function or function template that is explicitly declared static; or,
(3.2)
a non-inline variable of non-volatile const-qualified type that is neither explicitly declared extern nor previously declared to have external linkage ; or
(3.3)
a data member of an anonymous union.


Спасибо, не знал, что константные глобальные объекты можно не делать extern.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как задать значение переменной, которая определяет длину массива?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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