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

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

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

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

06.09.2011, 15:48. Просмотров 8274. Ответов 5
Метки нет (Все метки)

Всем привет.

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

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

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

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

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

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

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 не сработал везде ругается.

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2011, 15:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка выражение должно иметь константное значение (C++):

Error: Выражение должно иметь константное значение - C++
struct SolderInfo { string rang; string name; int pn; }; using namespace std; int main() { int n;

Выражение должно иметь константное значение. Нужно исправить - C++
#include &lt;iostream&gt; using namespace std; int main(){ int count_string, count_column,sum; cout &lt;&lt; &quot;Input count...

Ошибка выражение должно иметь тип указателя на объект - C++
Как устранить проблему? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include...

Ошибка в программе дешифрования: "выражение должно иметь тип указателя на объект" - C++
Возникают ошибки : 5 IntelliSense: выражение должно иметь тип указателя на объект c:\Users\Maks\Documents\Visual Studio...

Выражение должно иметь тип класса. Да ну? - C++
перекопал весь форум, ни где не нашел решение моей проблемы. #include &lt;GL/glut.h&gt; #include &lt;Windows.h&gt; #include &lt;iostream&gt; ...

Выражение должно иметь тип указателя - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct laiks { int h; int m; int s; ...

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

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


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

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

Или я опять не правильно что то понял?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 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];
}
Через ссылку.)
0
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) Выдаёт ошибку: выражение должно иметь констаантное значение. Как это можно исправить?
0
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,472
Записей в блоге: 2
14.02.2013, 11:39 #6
Цитата Сообщение от ozimandius Посмотреть сообщение
Как это можно исправить?
Прочитать про оператор switch и осознать в чем ошибка.
0
14.02.2013, 11:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 11:39
Привет! Вот еще темы с ответами:

Выражение должно иметь тип указателя на объект - C++
Не могу понять где я ошибся, на j ругается. // lalaba3.cpp: определяет точку входа для консольного приложения. // #include...

Vector size - выражение должно иметь тип указателя - C++
vector &lt;planet_Struct&gt; planet_map; int ywf = planet_map-&gt;size int ywf = planet_map-&gt;size; Подчеркивает красным planet_map и говорит,...

Двумерный массив - Выражение должно иметь константные значения - C++
Подскажите, почему у меня пишет ошибку в последней строке: выражение должно иметь константные значения. unsigned int rows, columns; ...

Выражение должно иметь тип класса в Visual Studio - C++
Здравствуйте! Около года назад прорешивали с братом возможные задания на экзамен (он учился на курс старше меня), а мне сейчас выпала...


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

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

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