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

Ошибка выражение должно иметь константное значение - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.96
towayy
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 20
06.09.2011, 15:48     Ошибка выражение должно иметь константное значение #1
Всем привет.

Тут такая песня началась забавная.

Вообще для начала я хочу выделить очень важную для меня строку - никакого решения в виде готового алгоритма показывать не нужно(я хочу это загадку потом решить, потому что пока она не решена она мне интересна)

Вообщем я С++ учу без всяких там спец курсов и думаю далековато уже продвинулся в плане основ и тут приятель решил на курсы записаться.
Ну а мне любопытно что они там проходят.

И значит у него произошёл затор и я решил попробовать колдовать над его задачей.

Его система обучения практически с первых занятий требует знания массивов и ссылок. У меня же эти главы подальше будут поэтому пришлось их бегло прочитать и запомнить синтаксисы написания.

Примерное задание такое: оно опять же с его слов:
Объявить клас в заголовочном файле например

C++
1
Test.h
ну примерно там будут записаны пару библиотек

C++
1
2
<iostream>
<string>
C++
1
2
поля данных
методы();
примерный синтаксис наверное такой:

C++
1
2
3
4
class Test
{
Компоненты класса
};
Сама фишка в том что ему запретили использовать модификаторы доступа:

C++
1
2
Public:
Private:
А в самом реализующем классе Test.cpp
нужно создать массив класса.
Может я не правильно терминологию употребил но примерно в моём понятие это бвыглядело бы так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
//Test.h
 
#include <iostream>
 
using namespace std;
 
class Test
{
int x;
//metods
starter();
};
C++
1
2
3
4
5
6
7
//Test.cpp
 
int Test::starter()
{
Test zasada[10] //вот в моём понятие массив класса
 
}
Вся загвоздка в том что нужно :
1 - не использовать модификаторы лдоступа public: Private:
2 - элемент массива задать через ссылку Test zasada[ssilka]

я попробовал 3 варианта но все они ссыллаются на ошибку в этом блоке:
Test zasada[ssilka] - пишется что выражение должно быть константным. Я это понимаю но блин все варианты провальные.

вот примеры:

1



C++
1
2
3
4
5
6
7
8
9
//Test.cpp
 
int Test::starter()
{
 char x = 'a';
 char *bb = &x;
 Test zasada[x]; //ошибка: выражение должно быть константным
 
}

2


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Test.cpp
 
int Test::starter()
{
  int aa = 10;
 bbb(aa);
 
 Test zasada[bbb]; //ошибка: выражение должно быть константным
 
}
 
//создал функцию отдельно и записал в аргумент не инициализированную ссылку
int bbb (int& b)
{
 b++;
}
Не 1 не сработал везде ругается.

Вопрос мой такой: правильный ли у меня подход был , я гдето близко плаваю или вообще я что то ещё не понял в плане ссылок и массивов.
Вообще Элемент массива можно ссылкой записал или нет ?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.09.2011, 15:55     Ошибка выражение должно иметь константное значение #2
У тебя в коде нет обращения к элементам масссива. У тебя попытка создать массив с заданием размера не константой, на это компилятор и ругается.
Перечитай главу про массивы ещё раз. Лезть в классы не зная, что такое массив и ссылка не советую.
towayy
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 20
06.09.2011, 16:04  [ТС]     Ошибка выражение должно иметь константное значение #3
Цитата Сообщение от Deviaphan Посмотреть сообщение
У тебя в коде нет обращения к элементам масссива.
Нет у меня есть обращения ко всем элементам массива просто я тут не расписывал их : Это не весь код это лишь беглый набросок что бы заострить внимание на ошибке.)

Я хотел показать лишь то что по заданию он просит задать размер массива через ССЫЛКУ.


И как ты уже сказал:
Цитата Сообщение от Deviaphan Посмотреть сообщение
У тебя попытка создать массив с заданием размера не константой, на это компилятор и ругается.
Да именно ругается. Потому что значение не константное. Если бы было просто 10 или ещё что всё было бы нармально. Да и использовать в элементе переменую тоже не вариант та же ошибка будет.

Поэтому я и поинтересовался вообще задание размера массива через ссылку это вооьбще возможно или нет ?

Или я опять не правильно что то понял?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.09.2011, 16:26     Ошибка выражение должно иметь константное значение #4
C++
1
2
3
4
void func( int & a )
{
     int * array = new int[a];
}
Через ссылку.)
ozimandius
2 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 29
14.02.2013, 01:42     Ошибка выражение должно иметь константное значение #5
Доброго времени суток! У меня вопрос по этой же теме, поэтому новую создавать не стал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
void main(void)
{system("chcp 1251>null");
int i,k;
cout<<"Введите число в интервале от 1 до 7";
cin>>k;
char d[7][30]={{"Понедельник"},{"Вторник"},{"Среда"},{"Четверг"},{"Пятница"},{"Суббота"},{"Воскресенье"}};
 
switch(k){for(i=1;i<8;i++){
    case i : cout<<"Числу "<<i<< "cоответствует день недели- "<<d[i][30];break;
    default: cout<<"Введённое число не принадлежит интервалу от 1 до 7!";break;}
}
}
Для i в case(строка 13) Выдаёт ошибку: выражение должно иметь констаантное значение. Как это можно исправить?
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
14.02.2013, 11:39     Ошибка выражение должно иметь константное значение #6
Цитата Сообщение от ozimandius Посмотреть сообщение
Как это можно исправить?
Прочитать про оператор switch и осознать в чем ошибка.
Yandex
Объявления
14.02.2013, 11:39     Ошибка выражение должно иметь константное значение
Ответ Создать тему
Опции темы

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