С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/68: Рейтинг темы: голосов - 68, средняя оценка - 4.84
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444

Массивы в заголовочных файлах

20.03.2011, 16:58. Показов 14109. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в заголовочном файле в описании класса пишу:


C++
1
int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
В итоге компилятор подчёркивает знак '=' и выдает ошибки:

Error 1 error C2059: syntax error : '{' c:\users\dimarik\desktop\lalala\lal ala\file.h 15
Error 2 error C2334: unexpected token(s) preceding '{'; skipping apparent function body c:\users\dimarik\desktop\lalala\lal ala\file.h 15
Error 3 error C2059: syntax error : '{' c:\users\dimarik\desktop\lalala\lal ala\file.h 15
Error 4 error C2334: unexpected token(s) preceding '{'; skipping apparent function body c:\users\dimarik\desktop\lalala\lal ala\file.h 15

Можно ли в заголовочном файле создать массив констант?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2011, 16:58
Ответы с готовыми решениями:

Про добавление заголовочных файлов в заголовочных файлах
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить (основываясь на моих знаниях о директиве...

О стандартных заголовочных файлах
Не знаю в какую категорию отнести данное нубство, но все же: Часто использую некоторые возможности/функции для которых не делал...

Константы в заголовочных файлах
declare.h #pragma once extern const size_t rows; extern const size_t cols; double initMatrixInput(double matrix);

41
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
20.03.2011, 17:00
delll
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
20.03.2011, 17:02
объяви его в С
а в заголовочном файле опиши внешним extern

Добавлено через 1 минуту
или может тебе подойдет enum
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:03
Цитата Сообщение от Dimarik__ Посмотреть сообщение
Можно ли в заголовочном файле создать массив констант?
Можно, но по-хорошему так не делают. Ошибка у тебя из-за чего-то другого. Покажи код на несколько строк выше и ниже этого места (или лучше вообще весь код)
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
20.03.2011, 17:05
Цитата Сообщение от neske Посмотреть сообщение
CodeBlocks компилирует без проблем
судя по ошибкам
этот заголовок подключен к нескольким файлам
==двойное определение
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:10  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Можно, но по-хорошему так не делают. Ошибка у тебя из-за чего-то другого. Покажи код на несколько строк выше и ниже этого места (или лучше вообще весь код)
ошибка в этом, потму что до добавления этого массива в файл, всё нормально работало. Двойного определения нет, потому что стоит защита в виде #ifndef....
Мне нужен массив, который будет являться private и который не будет переопределяться в классе. Я читал в литературе, если мы не будем изменять содержимое переменных, необходимо определять её как константу. Здесь аналогично то же самое или как? Как правильно надо делать?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
20.03.2011, 17:35
давай по порядку
Цитата Сообщение от Dimarik__ Посмотреть сообщение
защита в виде #ifndef
не всегда спасает отца "русской демократии"
на лицо кросс-определения когда два блока лезут к одному определению
Цитата Сообщение от Dimarik__ Посмотреть сообщение
Мне нужен массив, который будет являться private
он является членом класса??

и чем тебе enum не угодил?

Добавлено через 17 минут
Цитата Сообщение от Dimarik__ Посмотреть сообщение
определять её как константу
у тебя нет определение константы const
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:35
Цитата Сообщение от ValeryS Посмотреть сообщение
и чем тебе enum не угодил?
А с какого перепугу там вообще enum должен быть? Не говоря уж о том, что человек спрашивает о причинах конкретной проблемы, а не о том, как её затоптать
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:36  [ТС]
не всегда спасает отца "русской демократии"
на лицо кросс-определения когда два блока лезут к одному определению
В смысле?

он является членом класса??
Да.
и чем тебе enum не угодил?
То есть такое через массивы сделать не вариант и нужен обязательно enum? С массивами просто привычнее
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:36
Dimarik__, пока ты не покажешь нормально исходник, разговор, скорее всего, будет довольно беспредметным
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:37  [ТС]
нет определения как const - это я код криво скопировал.
C++
1
const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:39
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dimarik__ Посмотреть сообщение
Да
Вот показал бы исходник - сразу бы тебе ответили на вопрос. Внутри класс у тебя описываются ПОЛЯ класса, а не глобальные переменные. Класс - это описание типа, а потому он не может содержать данных

Добавлено через 1 минуту
Файл *.h:

C++
1
2
3
4
class T
{
  static const int arr[4];
};
Файл *.cpp:

C++
1
const int T::arr[4] = { 1, 2, 3, 4 };
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:40  [ТС]
C++
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
#ifndef file
#define file
#include <string>
#endif
using namespace std;
 
class Cryptograph
{
    private:
        string _sText;
 
 
    const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
 
 
        /////////////////////////////////////////////////
        //Методы
        ////////////////////////////////////////////////////
        void convertStringTo3dArray(string &str_1, unsigned char *** array_1,
            unsigned char *** array_2, unsigned long long a, int b, int c);
 
        
    public:
        Cryptograph(char* cText, char* cKey);//конструктор
 
};
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:41
Dimarik__, в посте 12 уже написал
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:43  [ТС]
А почему когда я пишу
C++
1
static const int const_int_charsInBlock = 16;//из скольки символов будет стостоять блок
всё работает нормально, а когда пишу
C++
1
static const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
компилятор ругается
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:45
Цитата Сообщение от Dimarik__ Посмотреть сообщение
А почему когда я пишу
Одно из раздолбайских свойств языка Си++. Для целочисленных переменных сие разрешено. Из тех соображений, что при любой попытке чтения переменной реально будет подставляться константа. Но адрес вроде бы как взять будет нельзя. Если ты вместо int'а подставишь float, то скорее всего будет ошибка
1
 Аватар для Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:48  [ТС]
C++
1
static const int const_int_charsInBlock = 16;//из скольки символов будет стостоять блок
и ещё. скажи, пожалуйста, почему выше указанной код в этом посте не работал без static?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:51
static означает поле, единое для всех экземпляров данного класса. По сути дела это означает отдельная глобальная переменная, которая доступна только методам данного класса. А без static - это обычное поле структуры или класса. Описание структуры или класса - это описание типа. Оно НЕ является "материальным" (т.е. типу ничего не соответствует в машине). Материальным является лишь объект (переменная или динамически выделенный экземпляр класса). И данными можно инициализировать лишь объект. Когда ты пишешь "static const int qqq = 16;" то почему-то разработчики Си++ порешили, что здесь как бы задаётся не статическое поле класса (т.е. не объект), а константа (т.е. не материальная субстанция)
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
20.03.2011, 17:55
Цитата Сообщение от Dimarik__ Посмотреть сообщение
То есть такое через массивы сделать не вариант и нужен обязательно enum? С массивами просто привычнее
ну тут дело вкуса мне enum более привычен
хотя зависит от задачи

Цитата Сообщение от Dimarik__ Посмотреть сообщение
static const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
класс это просто описатель и пока не объявлен хоть один объект в памяти место под класс не выделяется и компилятор просто не может(не знает) куда пихать твои константы.


Цитата Сообщение от Dimarik__ Посмотреть сообщение
static const int const_int_charsInBlock = 16;
по моему делать так тоже не рекомендуется
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.03.2011, 17:57
Цитата Сообщение от ValeryS Посмотреть сообщение
ну тут дело вкуса мне enum более привычен
И как через enum будет выражаться "_const_iMas[i+1]"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2011, 17:57
Помогаю со студенческими работами здесь

Линковка, реализация в заголовочных файлах
Ситуация следующая. Представим себет хедер, который содержит некоторый функционал и должен использоваться в нескольких проектах. Причем ...

Определение переменных в заголовочных файлах
Здорова! Определил переменную в заголовочном фале от так #pragma once #ifndef _imya_zagol_fayla #define _imya_zagol_fayla ...

Статические свойства структур в заголовочных файлах
Всем привет. Не могу найти в интернете инфу о том, как ведут себя статические свойства структур определённых в заголовочных файлах и...

Расположение определения функций в заголовочных файлах
grizlik78, Часто вижу что приватную секцию указывают внизу, интересно, зачем? Вроде удобнее расположить приватные члены класса в самом...

Странные объявления функций в заголовочных файлах
Пытаюсь потихоньку разобраться в C++. Когда читаешь теорию, почти все понятно, но когда лезешь в реальный код, возникает много вопросов. По...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru