Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
lenchis001
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
1

Задать размер динамического массива через переменную, обявленную как extern

01.09.2014, 01:17. Просмотров 879. Ответов 11
Метки нет (Все метки)

Привет народ, скажите, почему не компилирует:
C++
1
2
3
4
5
6
7
8
9
10
#include"stdafx.h"
#include"iostream"
using namespace std;
extern const int y;
int main(){
    int e[y];
    system("pause");
    return 0;
}
const int y = 9;
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2014, 01:17
Ответы с готовыми решениями:

Как задать размер массива, который является членом класса, через конструктор?
Почему так? И как же тогда задать размер этого массива? class Test { public: Test(int...

Как задать размеры агрегируемого через переменную?
Вот пример: class child{ public: string surname; string address; char gender;...

Как изменить размер динамического массива структур после того как был добавлен товар
Подскажите как мне изменить размер динамической массива структур после того как был добавлен товар...

Как задать размер массива через переменную?
Каким образом можно создать массив объектов, если его размер можно определить только по ходу...

Как уменьшить размер динамического массива через realloc?
Есть такой вариант, но он почему-то не работает. void remLastElement(int *array, int size) { ...

11
КОП
818 / 606 / 184
Регистрация: 15.08.2010
Сообщений: 1,730
Завершенные тесты: 2
01.09.2014, 01:25 2
lenchis001, а на что компилятор ругается?
0
lenchis001
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
01.09.2014, 01:28  [ТС] 3
error C2057: требуется константное выражение
error C2466: невозможно выделить память для массива постоянного нулевого размера
error C2133: e: неизвестный размер
0
КОП
818 / 606 / 184
Регистрация: 15.08.2010
Сообщений: 1,730
Завершенные тесты: 2
01.09.2014, 01:31 4
lenchis001, вооот, значит что компилятору нужно? не выражение, а константа. и тут совершенно неуместно extern, инициализируйте сразу константу.
0
01.09.2014, 01:31
Toshkarik
1168 / 881 / 94
Регистрация: 03.08.2011
Сообщений: 2,450
Завершенные тесты: 1
01.09.2014, 01:32 5
На момент определения необходимой памяти под массив, y неизвестна. Поэтому не получится ее использовать для задания размера массиву.
1
Vourhey
Почетный модератор
6627 / 2381 / 210
Регистрация: 29.07.2006
Сообщений: 12,876
01.09.2014, 01:33 6
Размер массива неизвестен на стадии компиляции.
0
lenchis001
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
01.09.2014, 01:34  [ТС] 7
как неизвестен? а extern тогда зачем?
0
Toshkarik
1168 / 881 / 94
Регистрация: 03.08.2011
Сообщений: 2,450
Завершенные тесты: 1
01.09.2014, 01:36 8
Лучший ответ Сообщение было отмечено lenchis001 как решение

Решение

extern говорит, что переменная будет определенна где то дальше, и, возможно, не в этой единице трансляции. Фактически, ее расположение будет доступно только на этапе компоновки, ну или сразу после ее определения. А размер для массива нужен на этапе компиляции.
1
Vourhey
Почетный модератор
6627 / 2381 / 210
Регистрация: 29.07.2006
Сообщений: 12,876
01.09.2014, 01:36 9
Цитата Сообщение от lenchis001 Посмотреть сообщение
как неизвестен?
А какой он по твоему?
Цитата Сообщение от lenchis001 Посмотреть сообщение
а extern тогда зачем?
Зачем ты его пишешь, если не знаешь, зачем он?
0
lenchis001
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
01.09.2014, 01:37  [ТС] 10
ОООООоооо, пасиб

Добавлено через 34 секунды
я знаю зачем он, просто вы не поняли как я поставил вопрос.
0
DrOffset
10915 / 5814 / 1432
Регистрация: 30.01.2014
Сообщений: 9,356
01.09.2014, 01:38 11
lenchis001, для массива размерность должна быть задана не просто константой, а константой времени компиляции. extern добавляет внешнее связывание, что уже не позволяет считать y константой времени компиляции, т.к. у константы времени компиляции не может быть связывания априори.
1
Toshkarik
1168 / 881 / 94
Регистрация: 03.08.2011
Сообщений: 2,450
Завершенные тесты: 1
01.09.2014, 01:40 12
C++
1
2
3
4
5
6
7
8
9
10
11
12
extern const int a;
 
int arr[ a ];  //вот здесь будет ошибка
 
const int a = 10;
 
int arr2[ a ]; //здесь ее уже не будет
 
int main() {
   
   return 0;
}
1
01.09.2014, 01:40
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2014, 01:40

Реализовать возможность задать размер динамического массива с помощью клавиатуры
Хочу сделать в программе на паскале возможность задать размер динамического массива с помощью...

Почему при передачи параметра(динамического массива) нельзя установить его размер через SetLength
procedure TFilter.CreateMassCheckBox(Var NameMass : array of TCheckBoxTransparent; Parent:...

Как задать style через переменную?
В прорисовке формы, как сделать, чтобы цвет бордюра можно было менять в зависимости от условия?...


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

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

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